2010-02-27 37 views
5

Ésta es mi tabla de datosCómo localizar el nombre de columna 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; 
     } 
    } 
}  

quiero para localizar los nombres de las columnas. ¿Puedes decirme cómo puedo hacer esto? Localicé mis páginas .aspx, pero no sé cómo localizar el texto en archivos .cs.

+0

¿Por qué quiere localizar los nombres de las columnas? Tu no Desea localizar el texto que se muestra a sus usuarios. –

+0

Porque quiero que los nombres de las columnas se escriban en un lenguaje que los usuarios puedan entender. –

+0

¿Puede decirme cómo localizar cadenas de la base de datos? –

Respuesta

3

Una vez que tenga los archivos resx agregados a su proyecto, Visual Studio genera clases fuertemente tipadas que le permiten acceder a ellas. Por ejemplo, si se agrega el Messages.resx a su proyecto se creará una clase estática Messages:

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

donde UserId es un recurso de cadena que ha añadido.

Una mejor solución sería localizar la interfaz de usuario y no los nombres de columna de la DataTable. He aquí un ejemplo:

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

Hay una GridView en la página unido a un DataTable con una sola columna. Observe el atributo meta:resourcekey="Grid" en BoundField. Ahora agregue la carpeta especial App_LocalResources a su aplicación web y dentro de ella un archivo de recursos llamado Default.aspx.resx asumiendo que la página web se llame Default.aspx. En su interior se podría añadir el siguiente recurso de cadena:

Grid.HeaderText | Some value 

El valor por defecto de la HeaderText dada en el marcado será reemplazado con el que está en el archivo de recursos siempre está presente.

+0

Gracias por la respuesta rápida. –

Cuestiones relacionadas