2012-04-05 45 views
9

Sé que la pregunta que voy a hacer ya está solicitada por otras personas, pero esas respuestas no son la solución para mi problema.¿Obtiene el valor del boundfield oculto? ASP.NET

Tengo una vista de cuadrícula que contiene 2 campos delimitados, 2 campos ButtonFields y un campo de casilla de verificación (que es un campo TemplateField).

También tengo una tabla de datos, llena de datos de la base de datos.

En el código aspx creo mi gridview con los campos establecidos en el último BoundField Visible = false.

En mi código subyacente, agrego las columnas y enlazo la fuente de datos a mi datatable.

Pero cuando intento leer los datos del campo delimitado oculto, ese campo está vacío. El problema por el que no puedo usar las soluciones mencionadas con preguntas similares es porque las personas suponen que los datos se completan uno por uno y no vinculando una tabla de datos al origen de datos de la vista de cuadrícula.

Así que mi pregunta es: ¿Es una manera de obtener los datos del campo cerrado oculto y también retienen la posibilidad de agregar los datos vinculando la tabla de datos a la fuente de datos de la vista de cuadrícula? Y si es así, ¿es posible obtener el valor de ese campo?

p.s. Estoy usando asp.net/c# en Visual Studio 2010

ASPX:

<asp:GridView ID="gvSelect" runat="server" AutoGenerateColumns="False" BorderStyle="None" onrowcommand="gvTestSelect_RowCommand"> 
    <Columns> 
     <asp:TemplateField> 
      <HeaderTemplate> 
       <asp:CheckBox runat="server" ID="cbHeader" OnPreRender="cbHeader_PreRender" /> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <asp:CheckBox runat="server" ID="cbItems" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="field" HeaderText="Veld" SortExpression="field" /> 
     <asp:ButtonField DataTextField="up" HeaderText="Omhoog" SortExpression="up" CommandName="up" Text="&uarr;" /> 
     <asp:ButtonField DataTextField="down" HeaderText="Omlaag" SortExpression="down" CommandName="down" Text="&darr;" /> 
     <asp:BoundField DataField="hidden" SortExpression="hidden" /> 
    </Columns> 
</asp:GridView> 

código subyacente (donde lleno el gridview):

//create array list and fill it with all columns 
Dictionary<string, string> dict = FillLists.getColumnsByTable(loader, ddlInfoTableI.SelectedItem.Value.ToString()); 

//loop trough dictionary 
foreach (var val in dict) 
{ 
    //create new dtSelect datarow 
    DataRow dr = dtSelect.NewRow(); 

    //set row values for column values 
    dr["select"] = false; 
    dr["field"] = val.Value.ToString(); 
    dr["up"] = new ButtonField { CommandName = "up", Text = loader.LoadResourceString(1024), HeaderText = "&uarr;", ButtonType = ButtonType.Button, Visible = true }; 
    dr["down"] = new ButtonField { CommandName = "down", Text = loader.LoadResourceString(1025), HeaderText = "&darr;", ButtonType = ButtonType.Button, Visible = true }; 
    dr["hidden"] = val.Key.ToString(); 

    //add the datarow 
    dtSelect.Rows.Add(dr); 

    //set datatable session to datatable 
    Session["dtSelect"] = dtSelect; 

    //set datasource of the gridview to datatable 
    gvSelect.DataSource = dtSelect; 

    //bind data to gridview 
    gvSelect.DataBind(); 
} 

Así que ahora tengo que conseguir la datos de la vista de cuadrícula (escpecialy desde el campo delimitado oculto), porque pueden editar la vista de cuadrícula excepto el campo delimitado oculto, por lo que esa es la única forma de saber qué fila original era.

+0

Muéstranos tu código. –

+0

¿Cuándo y cómo estás leyendo? – V4Vendetta

+0

** http: //stackoverflow.com/faq#howtoask** –

Respuesta

13

agregar una clave de datos de la columna que necesita para obtener:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="hidden" ...> 

Una vez que haya agregado la clave de datos, puede acceder a su valor con el índice de la fila:

var rowIndex = 0; 
var hiddenValue = (string)GridView1.DataKeys[rowIndex]["hidden"]; 
+0

Muchas gracias, ¡esto me ayudó! –

1

que pueda usa este código lo probé

TextBox1.Text = GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();

+0

Esta es verdaderamente la forma más limpia que he encontrado hasta ahora. – ArtK

1

Otra opción es mantener el BoundField (o cualquier otro tipo de columna) visible en el marcado (quitar Visible = False), y utilizar el evento RowDataBound para ocultar las columnas:

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    e.Row.Cells[COLUMN_USERID].Visible = false; 
} 
+1

Todas las respuestas se ven bien, pero este método funciona mejor si ya ha escrito el código y no desea hacer otros cambios –

Cuestiones relacionadas