2010-02-27 4 views
5

Это мой DataTableКак локализовать имя DataTable колонки

public static DataTable GetTableForApproval() 
{ 
    using (var connection = Utils.Database.GetConnection()) 
    using (var command = new SqlCommand("SELECT [UserID], [Username], " + 
      "[Email], [Role], [Date] FROM [Users] WHERE [Role] = @role", 
      connection)) 
    { 
     command.Parameters.AddWithValue("@role", "Waiting"); 
     using (var reader = command.ExecuteReader()) 
     { 
      var table = new DataTable(); 

      table.Columns.Add("UserID", typeof(int)); 
      table.Columns.Add("Name", typeof(string)); 
      table.Columns.Add("Email", typeof(string)); 
      table.Columns.Add("Role", typeof(string)); 
      table.Columns.Add("Registration date", typeof(DateTime)); 

      if (reader != null) 
      { 
       while (reader.Read()) 
       { 
        table.Rows.Add((int)reader["UserID"], 
         (string)reader["Username"], (string)reader["Email"], 
         (string)reader["Role"], (DateTime)reader["Date"]); 
       } 
      } 
      return table; 
     } 
    } 
}  

Я хочу, чтобы локализовать имена столбцов. Можете ли вы сказать мне, как я могу это сделать? Я локализовал свои .aspx-страницы, но я не знаю, как локализовать текст в .cs-файлах.

+0

Почему вы хотите локализовать имена столбцов? Вы этого не сделаете. Вы хотите локализовать текст, отображаемый вашим пользователям. –

+0

Потому что я хочу, чтобы имена колонок записывались на языке, который пользователи могут понять. –

+0

Можете ли вы рассказать мне, как локализовать строки из базы данных? –

ответ

3

После того, как у вас есть файлы resx, добавленные в ваш проект, Visual Studio генерирует строго типизированные классы, позволяющие вам получить к ним доступ. Например, если добавить Messages.resx в ваш проект будет создан Messages статический класс:

table.Columns.Add(Messages.UserId, typeof(int)); 

где UserId это вы добавили строку ресурса.

Лучшим решением было бы локализовать интерфейс пользователя, а не имена столбцов DataTable. Вот пример:

<%@ Page Language="C#" AutoEventWireup="true" %> 
<script type="text/C#" runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      var table = new System.Data.DataTable(); 
      table.Columns.Add("UserID", typeof(int)); 
      for (int i = 0; i < 10; i++) 
      { 
       table.Rows.Add(i); 
      } 
      grdTest.DataSource = table; 
      grdTest.DataBind(); 
     } 
    } 
</script> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:GridView ID="grdTest" runat="server" AutoGenerateColumns="false"> 
      <Columns> 
       <asp:BoundField DataField="UserID" 
        HeaderText="default value" 
        meta:resourcekey="Grid" /> 
      </Columns> 
     </asp:GridView> 
    </div> 
    </form> 
</body> 
</html> 

Там в GridView на странице, связанной с DataTable с одной колонкой. Обратите внимание на атрибут meta:resourcekey="Grid" на BoundField. Теперь добавьте специальную папку App_LocalResources в ваше веб-приложение и внутри нее файл ресурсов с именем Default.aspx.resx, предполагая, что веб-страница называется Default.aspx. Внутри вы можете добавить следующую строку ресурс:

Grid.HeaderText | Some value 

Значение по умолчанию HeaderText данных в разметке будет заменено на один в файле ресурсов при условии, что присутствует.

+0

Благодарим за быстрый ответ. –

Смежные вопросы