Dados originais:
Dados traduzidos:
Geralmente, é fácil consultar e exibir um DataTable no código, desde que o DataTable consultado seja usado como fonte de dados de um determinado controle, tudo bem, mas os campos desse DataTable são todos campos em inglês, como mudá-los todos para chinês?
Agora eu sei os nomes chineses de cada campo em inglês, e toda a informação de tradução dos campos está armazenada em uma tabela chamada COLUMNTRANSLATION, e a instrução SQL para criar essa tabela é:
criar tabela COLUMNTRANSLATION
( NÚMERO DE IDENTIFICAÇÃO (10) CHAVE PRIMÁRIA, NOME COLUNA VARCHAR2(50), //nome do campo TRADUÇÃO VARCHAR2(50) // campo correspondente ao nome chinês
)
Coloque alguns dados primeiro, para que haja vários registros nesta tabela, por exemplo: Nomedo do Estudante corresponde a "nome do aluno".
Agora que tenho um DataTable com todos os seus nomes de campos em inglês, posso traduzi-lo e devolver o DataTable traduzido simplesmente executando o seguinte código:
- /// <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;
- }
Copiar código A ideia desse método é construir uma nova DataTable de acordo com a DataTable a ser traduzida: o nome da coluna de cada coluna da nova DataTable é o nome chinês traduzido (se o nome da coluna em inglês não for traduzido, o nome da coluna em inglês é mantido; se puder ser traduzido, é traduzido), e após construir as informações de campo da nova DataTable, os registros da DataTable antiga são inseridos no novo DataTable um a um.
Hehe, é uma vez... Mas a velocidade ainda é possível.
|