5 Stimmen

Wie man DataTable Spaltennamen lokalisiert

Dies ist meine Datentabelle

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 möchte die Spaltennamen lokalisieren. Können Sie mir sagen, wie ich das machen kann? Ich habe meine .aspx-Seiten lokalisiert, aber ich weiß nicht, wie ich den Text in .cs-Dateien lokalisieren kann.

3voto

Darin Dimitrov Punkte 990883

Sobald Sie die resx-Dateien zu Ihrem Projekt hinzugefügt haben, generiert Visual Studio stark typisierte Klassen, mit denen Sie auf sie zugreifen können. Wenn Sie zum Beispiel die Messages.resx zu Ihrem Projekt eine Messages statische Klasse erstellt werden:

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

wobei UserId ist eine von Ihnen hinzugefügte String-Ressource.

Eine bessere Lösung wäre, die Benutzeroberfläche zu lokalisieren und nicht die Spaltennamen der DataTable. Hier ist 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, die an eine DataTable mit einer einzigen Spalte. Beachten Sie die meta:resourcekey="Grid" Attribut für das BoundField. Fügen Sie nun den speziellen Ordner App_LocalResources zu Ihrer Webanwendung hinzu und darin eine Ressourcendatei namens Default.aspx.resx vorausgesetzt, die Webseite heißt Default.aspx . Darin könnten Sie die folgende String-Ressource hinzufügen:

Grid.HeaderText  |  Some value

Der Standardwert des Parameters HeaderText wird durch die in der Ressourcendatei angegebene ersetzt, sofern sie vorhanden ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X