今天写了一段代码,目的是想在DataGrid显示中文列头的时候不用老是写SQL语句在字段名后面加中文,如:
“select a 编号,b 姓名,c 性别 from tablename“, 但如果字段有很多呢?怎么办,于是想了一个偷懒的办法,只需要调用一个方法,传入表名,将返回的DataTable直接绑定在DataGrid上,OK!!!
前题条件是必须在数据库内将字段的中文意思写在" 描述 "内,否则会报错!!!(SqlServer数据库)
为了容易看懂,拆成了几个方法:
///
1<summary>
2/// 获取数据表
3/// </summary>
///
1<param name="FieldEn"/>
数据库字段名数组
///
1<param name="TableName"/>
想要打开的表名
///
1<returns>数据表</returns>
public DataTable GetDataTableByField( string [] FieldEn, string TableName)
{
Hashtable hash= new Hashtable();
hash=FillHashtable(TableName);
string field= string .Empty;
if (FieldEn== null )
{
return null ;//这里可以写,如果不传字段名,就显示所有的字段名,偷懒,留给你写咧
}
else
{
for(int j=0;j
1<fielden.length;j++) "+="" "+hash[fielden[j]].tostring()+",";="" +="" +"="" <summary="" char[]{','});="" datatable="" dt="GetDataTableBySQL(sql);" dt.tablename="TableName;" dt;="" field="" field+='FieldEn[j]+"' from="" return="" sql="select " string="" tablename;="" {="" }="">
2/// 获取哈希表(表的英文及中文字段名)
3///
4/// <param name="TableName"/>表的名称
5/// <returns>哈希表</returns>
6private Hashtable FillHashtable( string TableName)
7{
8Hashtable hash= new Hashtable();
9string sql="SELECT objname,[value] FROM ::fn_listextendedproperty"+
10"(NULL,'user', 'dbo', 'table', '"+TableName+"', 'column', default)";
11DataTable dt=GetDataTableBySQL(sql);
12foreach (DataRow dr in dt.Rows)
13{
14hash.Add(dr["objname"].ToString(),dr["value"].ToString());
15}
16return hash;
17}
18
19/// <summary>
20/// 获取数据表(自定的SQL)
21/// </summary>
22/// <param name="strSQL"/>自定义的SQL语句
23/// <returns>数据表</returns>
24public DataTable GetDataTableBySQL( string strSQL)
25{
26//GetConnection()为获取数据连接的方法,这里就不列出来咧!!嘿嘿
27SqlDataAdapter apt= new SqlDataAdapter(strSQL,GetConnection());
28DataTable dt= new DataTable();
29apt.Fill(dt);
30return dt;
31}
32
33写这个的时候并未考虑性能方面的问题,如果是想批评它速度慢,性能差的朋友就不用说了!!!
34不过欢迎提出你的想法,并帮我改进,感激不尽!!!</fielden.length;j++)>