Originaldata:
Översatt data:
Generellt är det enkelt att fråga och visa en DataTable i koden, så länge den frågade DataTable används som DataSource för en viss kontroll, det är okej, men fälten i denna DataTable är alla engelska fält, hur ändrar man dem alla till kinesiska?
Nu känner jag till de kinesiska namnen på varje engelskt fält, och all översättningsinformation för fälten lagras i en tabell som heter COLUMNTRANSLATION, och SQL-satsen för att skapa denna tabell är:
skapa tabell KOLUMNÖVERSÄTTNING
( ID-NUMMER(10) PRIMÄRNYCKEL, KOLUMNNAMN VARCHAR2(50), //fältnamn ÖVERSÄTTNING VARCHAR2(50) // fält som motsvarar det kinesiska namnet
)
Lägg in några data i den först, så att det finns flera poster i denna tabell, till exempel: StudentName motsvarar "student name".
Nu när jag har en DataTable med alla dess fältnamn på engelska kan jag översätta den och returnera den översatta DataTable genom att helt enkelt köra följande kod:
- /// <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;
- }
Kopiera koden Tanken med denna metod är att konstruera en ny DataTable enligt den DataTable som ska översättas: kolumnnamnet för varje kolumn i den nya DataTable är det översatta kinesiska namnet (om det engelska kolumnnamnet inte översätts behålls det engelska kolumnnamnet, om det kan översättas översätts det), och efter att fältinformationen för den nya DataTable har konstruerats, infogas posterna från den gamla DataTable i den nya DataTable en efter en.
Hehe, det är en vändning... Men hastighet är fortfarande möjligt.
|