找了下csdn中有现成的。我也是这相思路。
将DataTable的字段名全部翻译为中文并返回 .
2010-02-24 15:54 293人阅读 评论(0) 收藏 举报
一般在代码里想要查询并显示出一个DataTable很容易,只要将查询到的DataTable作为某个控件的DataSource就OK了,但是此DataTable的字段全部都为英文字段,怎样将其全部改为中文呢?
现在我已经知道各个英文字段的中文名称,且字段的翻译信息全部存为一张表,叫字段说明表(COLUMNTRANSLATION),建此表的SQL语句为:
create table COLUMNTRANSLATION
(
ID NUMBER(10) PRIMARY KEY,
COLUMNNAME VARCHAR2(50), //字段名称
TRANSLATION VARCHAR2(50) //字段对应的中文名称
)
自己先放几个数据进去,使这张表里有几条记录,例如:StudentName对应的是“学生姓名”。
那么现在我已经由一个DataTable了,它的字段名全部都为英文,我只需执行以下代码就可将其翻译过来,并返回翻译过后的DataTable:
[c-sharp] view plaincopyprint?
01./// <summary>
02./// 将DataTable的字段名全部翻译为中文
03./// </summary>
04./// <param name="table">待翻译的DataTable</param>
05./// <returns></returns>
06.public DataTable TranslateDataTable(DataTable table)
07.{
08. DataTable dt = new DataTable();
09. dt.TableName = "TempTable";
10.
11. if (table != null && table.Rows.Count > 0)
12. {
13. //先为dt构造列信息
14. foreach (DataColumn column in table.Columns)
15. {
16. string name = GetColumnName(column.ColumnName);
17. dt.Columns.Add(name);
18. }
19.
20. for (int i = 0; i < table.Rows.Count; i++)
21. {
22. DataRow NewRow = dt.NewRow();
23. DataRow row = table.Rows[i];
24.
25. for (int j = 0; j < dt.Columns.Count; j++)
26. {
27. NewRow[j] = row[j].ToString();
28. }
29.
30. dt.Rows.Add(NewRow);
31. }
32. }
33. return dt;
34.}
35.
36./// <summary>
37./// 得到列名称的别名
38./// </summary>
39./// <param name="columnName"></param>
40./// <returns></returns>
41.private string GetColumnName(string columnName)
42.{
43. string sqlString = " Select TRANSLATION from COLUMNTRANSLATION where COLUMNNAME = '" + columnName.ToUpper() + "'";
44.
45. object s = dao.ExecuteScalar(sqlString);
46. string name = (s == null) ? columnName : s.ToString(); //如果此英文字段有翻译,则返回其中文翻译,若无,则保留此英文翻译。
47. return name;
48.}
/// <summary>
/// 将DataTable的字段名全部翻译为中文
/// </summary>
/// <param name="table">待翻译的DataTable</param>
/// <returns></returns>
public DataTable TranslateDataTable(DataTable table)
{
DataTable dt = new DataTable();
dt.TableName = "TempTable";
if (table != null && table.Rows.Count > 0)
{
//先为dt构造列信息
foreach (DataColumn column in table.Columns)
{
string name = GetColumnName(column.ColumnName);
dt.Columns.Add(name);
}
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow NewRow = dt.NewRow();
DataRow row = table.Rows[i];
for (int j = 0; j < dt.Columns.Count; j++)
{
NewRow[j] = row[j].ToString();
}
dt.Rows.Add(NewRow);
}
}
return dt;
}
/// <summary>
/// 得到列名称的别名
/// </summary>
/// <param name="columnName"></param>
/// <returns></returns>
private string GetColumnName(string columnName)
{
string sqlString = " Select TRANSLATION from COLUMNTRANSLATION where COLUMNNAME = '" + columnName.ToUpper() + "'";
object s = dao.ExecuteScalar(sqlString);
string name = (s == null) ? columnName : s.ToString(); //如果此英文字段有翻译,则返回其中文翻译,若无,则保留此英文翻译。
return name;
}
这种方法的思想是根据待翻译的DataTable构造新的DataTable:新的DataTable的每一列的列名为翻译后的中文名(若英文列名无翻译,则保留英文列名,若能翻译,则翻译过来),构造好新的DataTable的字段信息后,再一条条的把旧的DataTable的记录插入到新的DataTable中去。
呵呵,绕弯了...但是速度还是可以的。