2009-10-15 9 views
10

Ho una griglia con un campo modello. Nel campo del modello è presente una casella di controllo. Ho un pulsante di invio al di fuori di gridview per assegnare i record che sono stati controllati. Nel postback nessuna casella di controllo si registra come controllata. Ecco il mio codice:La casella di controllo in TemplateField in Gridview perde il controllo 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 
     } 
    } 
} 

Ho un punto di interruzione impostato sulla stringa ID = lblID.Text; ma non trova mai nessuno controllato.

+0

sto usando C#, ma questo esempio dal sito web asp.net in VB.Net è fondamentalmente facendo esattamente quello che sto facendo: http: // www .asp.net/Learn/data-access/tutorial-52-vb.aspx Quindi so che è possibile, semplicemente non so perché non funziona per me. – Jhorra

+1

Quando il ciclo di vita della pagina è il metodo con cui si assegna la chiamata? –

+0

Controlla qui la soluzione, devi selezionare la casella di controllo persistente http://highoncoding.com/Articles/697_Persisting_CheckBox_State_While_Paging_in_GridView_Control.aspx – user2323258

risposta

14

Penso che quello che manca è, quando si fa clic sul pulsante e la pagina viene postback, si rebinding a GridView, hai bisogno di impegnare in questa condizione come

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

Hai ragione, ho appena inserito un punto di interruzione nel metodo di ricerca, e viene richiamato di nuovo. Dovrò rintracciare da dove viene chiamato. – Jhorra

1

Su un postback, i contenuti di GridView vengono ricreati dai dati di Viewstat postback tra page_init e page_load. Forse prova a esaminare il tuo Gridview in page_load per vedere cosa c'è.

0

impostare l'attributo AutoPostBack di Casella

AutoPostBack="true" 
Problemi correlati