找了下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中去。
呵呵,绕弯了...但是速度还是可以的。