最近项目中需要使用ASPNET制作自定义查询功能根据表的字段名称与条件建立不同的查询语句这就需要知道如何通过ADONET把一个表的结构显示出来并绑定到需要显示的控件上其实ADONET已经提供了相应的函数来做到这一点下面通过详细的代码实例来察看结果 由于本人通过使用Webservice来返回数据的结果便制作了GetTableSchema(string sqlStr)函数详细代码如下 /// <summary> /// 名称GetTableSchema /// 参数string sqlStr前台查询语句 /// 功能获得表结构 /// 返回值DataSet /// </summary> [WebMethod(EnableSession=trueDescription = 获得表结构)] public DataSet GetTableSchema(string sqlStr) { DataSet ds = new DataSet(); OleDbCommand cmd = new OleDbCommand(sqlStrconn); connOpen(); OleDbDataReader read = cmdExecuteReader(); DataTable tb = readGetSchemaTable();//注意这句话 dsTablesAdd(tb); readClose(); connClose(); return ds; } 当建立好Webservice后下面需要再前台把相应的表结构字段信息显示到一个 DropDownList中但是有一个问题要解决的是我所要查询的表字段信息在建表的时候都采用了英文字段如何把表的英文字段变为中文字段就需要一个临时的DataSet来转换一下在临时的DataSet中建立一个临时表来存储字段的中文信息和英文信息的对照关系通过遍理整个临时表信息来取出相对应的中文字段信息并回显到前台WebCombo中(注由于本项目的用户需求原因我们采用WebCombo代替了开发者的DropDownList)详细的代码如下 //CheckBoxList cbl = new CheckBoxList(); //复选框显示方式为纵状每列现实条纪录 cblRepeatColumns = ; //cblRepeatDirection = Horizontal; //建立新的ListItem存放试图表中的列值 ListItem li = new ListItem(); DataSet d = new DataSet(); DataTable t = new DataTable(t);//建立表t DataColumn c = new DataColumn(); cDataType = SystemTypeGetType(SystemString); cColumnName = c; tColumnsAdd(c); DataColumn c = new DataColumn(); cDataType = SystemTypeGetType(SystemString); cColumnName = c; tColumnsAdd(c); DataColumn c = new DataColumn(); cDataType = SystemTypeGetType(SystemString); cColumnName = c; tColumnsAdd(c); //r[c]:列的英文名字r[c]:列的中文名字r[c]:列的类型 DataRow r; //通过试图操作Webservice中的GetTableSchema函数来返回表的结构 foreach(DataRow row in usGetTableSchema(select * from zc_view_kpb)Tables[]Rows) { r = tNewRow(); r[c] = row[ColumnName]ToString(); string colname=; colname = row[ColumnName]ToString(); switch (colname) { case KPID: r[c] = 卡片编号; break; case ZJRQ: r[c] = 折旧日期; break; case ZCMLID: r[c] = 资产目录编号; break; default: break; } //逐个添加列的名字到复选框中 //cbl是一个CheckBoxList控件显示表结构所有字段信息意思是让用户可以选择不同的字段内容并自动生成DataGrid的列信息供用户浏览在此不必理会 cblItemsAdd(new ListItem(r[c]ToString()colname)); //在r[c]中存储的内容为字段的类型+英文名称 r[c] = row[ProviderType]ToString()+colname; tRowsAdd(r); } //生成表并绑顶到下拉列表 //Wcol为WebCombo控件名称 dTablesAdd(t); thisWColDataSource = d; thisWColDataMember = dTables[t]ToString(); thisWColDataTextField = c; thisWColDataValueField = c; thisWColDataBind(); 到此我们已经把表的字段信息绑定到了需要的控件上如果要帮定到DropDownList是同样的道理大家不妨试一下 |