2009-10-15 10 views
10

Tengo una vista de cuadrícula con un campo de plantilla. En ese campo de plantilla hay una casilla de verificación. Tengo un botón Enviar fuera de la vista de cuadrícula para asignar los registros que se marcaron. En la devolución, ninguna casilla de verificación se registra como marcada. Aquí está mi código:Casilla de verificación en TemplateField en Gridview pierde marcada en postback

<Columns> 
       <asp:TemplateField> 
        <ItemTemplate> 
         <asp:CheckBox ID="cb" Checked="false" runat="server" /> 
         <asp:Label ID="lblCFID" runat="server" Visible="false" Text='<%# Eval("ID") %>' /> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:BoundField HeaderStyle-HorizontalAlign="Center" DataField="Name" HeaderText="Name" /> 
       <asp:BoundField HeaderStyle-HorizontalAlign="Center" DataField="DOB" HeaderText="Date of Birth" /> 
       <asp:BoundField HeaderStyle-HorizontalAlign="Center" HeaderText="Gender" DataField="Gender" /> 
       <asp:BoundField HeaderStyle-HorizontalAlign="Center" HeaderText="Status" DataField="Status" /> 
       <asp:BoundField HeaderStyle-HorizontalAlign="Center" HeaderText="Plan Name" DataField="PlanName" /> 
       <asp:BoundField HeaderStyle-HorizontalAlign="Center" HeaderText="Type" DataField="ControlType" /> 
       <asp:BoundField HeaderStyle-HorizontalAlign="Center" HeaderText="Date of Service" dataformatstring="{0:MMMM d, yyyy}" htmlencode="false" DataField="DateofService" /> 
      </Columns> 

protected void AssignRecords(object sender, EventArgs e) 
{ 
    int Rows = gvASH.Rows.Count; 
    for (int i = 0; i < Rows; i++) 
    { 
     //CheckBoxField cb = ((CheckBoxField)gvASH.Rows[i].Cells[1]).; 
     CheckBox cb = (CheckBox)gvASH.Rows[i].Cells[0].FindControl("cb"); 
     Label lblID = (Label)gvASH.Rows[i].Cells[0].FindControl("lblCFID"); 
     if (cb.Checked == true) 
     { 

      string ID = lblID.Text; 
      //Assign Code 
     } 
    } 
} 

Tengo un punto de interrupción establecido en la cadena ID = lblID.Text; pero nunca encuentra ninguno que esté marcado.

+0

estoy usando C#, pero este ejemplo de la página web asp.net en VB.Net está haciendo básicamente es exactamente lo que estoy haciendo: http: // www .asp.net/Learn/data-access/tutorial-52-vb.aspx Así que sé que es posible, simplemente no sé por qué no funciona para mí. – Jhorra

+1

¿Cuándo es el ciclo de vida de la página su método para asignar el llamado? –

+0

Consulte la Solución aquí, debe mantener la casilla de verificación de selección http://highoncoding.com/Articles/697_Persisting_CheckBox_State_While_Paging_in_GridView_Control.aspx – user2323258

Respuesta

14

Creo que lo que se echa en falta es, cuando se hace clic en el botón y su página es la devolución de datos, que volver a vincular a gridview, tiene que unirse en esta condición como

if (!Page.IsPostBack) 
    { 
     GridView1.DataSourceID = "yourDatasourceID"; 
     GridView1.DataBind(); 
    } 
+0

Tiene razón, acabo de poner un punto de interrupción en el método de búsqueda, y se vuelve a llamar. Tendré que rastrear desde dónde se llama. – Jhorra

1

En una devolución de datos, el contenido de GridView se vuelven a crear a partir de los datos Viewstate de la devolución de datos entre page_init y page_load. Tal vez intente examinar su Gridview en page_load para ver qué hay allí.

0

establece el atributo de AutoPostBack Casilla

AutoPostBack="true" 
Cuestiones relacionadas