Оригинални данни:
Преведени данни:
Обикновено е лесно да се прави заявка и да се показва DataTable в кода, стига заявената DataTable да се използва като източник на данни на определен контрол, това е ОК, но полетата в тази DataTable са всички английски полета, как да ги сменя всички на китайски?
Сега знам китайските имена на всяко английско поле и цялата преводна информация на полетата се съхранява в таблица, наречена COLUMNTRANSLATION, а SQL операторът за създаване на тази таблица е:
създаване на таблица COLUMNTRANSLATION
( ИДЕНТИФИКАЦИОНЕН НОМЕР(10) ПЪРВИЧЕН КЛЮЧ, ИМЕ НА КОЛОНА VARCHAR2(50), //име на полето ПРЕВОД VARCHAR2(50) // поле, съответстващо на китайското име
)
Първо добавете няколко данни, за да има няколко записа в тази таблица, например: StudentName съответства на "име на ученик".
Сега, когато имам DataTable с всички имена на полета на английски, мога да я преведа и да върна преведената DataTable, като просто изпълня следния код:
- /// <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 един по един.
Хехе, завой... Но скоростта все още е възможна.
|