2010-02-27 28 views
5

Đây là DataTableLàm thế nào để bản địa hoá tên cột 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; 
     } 
    } 
}  

Tôi muốn để bản địa hoá các tên cột của tôi. Bạn có thể cho tôi biết làm thế nào tôi có thể làm điều này? Tôi đã bản địa hoá các trang .aspx của mình, nhưng tôi không biết cách bản địa hóa văn bản trong các tệp .cs.

+0

Tại sao bạn muốn bản địa hóa các tên cột? Bạn không. Bạn muốn bản địa hóa văn bản hiển thị cho người dùng của mình. –

+0

Bởi vì tôi muốn các tên cột được viết bằng ngôn ngữ, mà người dùng có thể hiểu được. –

+0

Bạn có thể cho tôi biết cách địa phương hóa chuỗi từ cơ sở dữ liệu không? –

Trả lời

3

Khi bạn đã thêm các tệp resx vào dự án của mình, Visual Studio tạo các lớp được nhập mạnh mẽ cho phép bạn truy cập chúng. Ví dụ, nếu bạn thêm Messages.resx để dự án của bạn một lớp tĩnh Messages sẽ được tạo:

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

nơi UserId là một nguồn tài nguyên chuỗi bạn đã thêm.

Giải pháp tốt hơn là bản địa hóa giao diện người dùng chứ không phải là tên cột của DataTable. Dưới đây là một ví dụ:

<%@ 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> 

Có một GridView trên trang ràng buộc với một DataTable với một cột duy nhất. Chú ý thuộc tính meta:resourcekey="Grid" trên BoundField. Bây giờ thêm thư mục App_LocalResources đặc biệt vào ứng dụng web của bạn và bên trong nó một tệp tài nguyên có tên là Default.aspx.resx giả sử trang web được gọi là Default.aspx. Bên trong, bạn có thể thêm các tài nguyên chuỗi sau:

Grid.HeaderText | Some value 

Giá trị mặc định của HeaderText đưa ra trong đánh dấu sẽ được thay thế bằng một trong các tập tin tài nguyên được cung cấp nó hiện diện.

+0

Cảm ơn bạn đã trả lời nhanh. –

Các vấn đề liên quan