Reputation: 5482
This is my 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;
}
}
}
I want to localize the columns names. Can you tell me how can I do this? I localized my .aspx pages, but I don't know how to localize the text in .cs files.
Upvotes: 5
Views: 2549
Reputation: 1038830
Once you have the resx files added to your project, Visual Studio generates strongly typed classes allowing you to access them. For example if you add the Messages.resx
to your project a Messages
static class will be created:
table.Columns.Add(Messages.UserId, typeof(int));
where UserId
is a string resource you added.
A better solution would be to localize the user interface and not the column names of the DataTable. Here's an example:
<%@ 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>
There's a GridView
on the page bound to a DataTable
with a single column. Notice the meta:resourcekey="Grid"
attribute on the BoundField. Now add the special App_LocalResources folder to your web application and inside it a resource file named Default.aspx.resx
assuming the web page is called Default.aspx
. Inside you could add the following string resource:
Grid.HeaderText | Some value
The default value of the HeaderText
given in the markup will be replaced with the one in the resource file provided it is present.
Upvotes: 3