2010-02-27 15 views
5

Dies ist meine DatentabelleWie Datatable Spaltennamen lokalisieren

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; 
     } 
    } 
}  

ich die Spaltennamen lokalisieren möchten. Kannst du mir sagen, wie ich das machen kann? Ich lokalisierte meine ASPX-Seiten, aber ich kann den Text in CS-Dateien nicht lokalisieren.

+0

Warum möchten Sie die Spaltennamen lokalisieren? Du nicht. Sie möchten den Text lokalisieren, der Ihren Benutzern angezeigt wird. –

+0

Weil ich möchte, dass Spaltennamen in einer Sprache geschrieben werden, die Benutzer verstehen können. –

+0

Können Sie mir sagen, wie man Strings von der Datenbank lokalisieren kann? –

Antwort

3

Sobald Sie die Resx-Dateien zu Ihrem Projekt hinzugefügt haben, generiert Visual Studio stark typisierte Klassen, die Ihnen den Zugriff ermöglichen. Wenn Sie zum Beispiel die Messages.resx zu Ihrem Projekt hinzufügen eine Messages statische Klasse wird erstellt:

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

wo UserId eine String-Ressource ist, dass Sie hinzugefügt.

Eine bessere Lösung wäre die Lokalisierung der Benutzeroberfläche und nicht die Spaltennamen der DataTable. Hier ein Beispiel:

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

Es gibt eine GridView auf der Seite gebunden an ein DataTable mit einer einzigen Spalte. Beachten Sie das Attribut meta:resourcekey="Grid" auf dem BoundField. Fügen Sie nun den speziellen Ordner "App_LocalResources" zu Ihrer Webanwendung hinzu, und darin wird eine Ressourcendatei mit dem Namen Default.aspx.resx mit der Bezeichnung Default.aspx eingefügt. Im Inneren finden Sie die folgende Zeichenfolge-Ressource hinzufügen könnte:

Grid.HeaderText | Some value 

Der Standardwert des HeaderText im Markup angegeben wird mit der in der Ressource-Datei ersetzt werden, sofern es vorhanden ist.

+0

Vielen Dank für die schnelle Antwort. –

Verwandte Themen