10
votes

Case à cocher dans Templatefield in GridView Loses Vérifié sur Post-foret

J'ai une grille de grille avec un champ de modèle. Dans ce champ de modèle est une case à cocher. J'ai un bouton d'envoi en dehors de la GridView pour attribuer les enregistrements vérifiés. Sur le message, aucune case à cocher enregistre comme étant vérifiée. Voici mon code:

<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
        }
    }
}


3 commentaires

J'utilise C #, mais cet exemple du site Web ASP.NET dans VB.NET fait essentiellement exactement ce que je fais: asp.net/learn/data-access/tatuly-52-vb.aspx Donc je sais que c'est possible, je ne sais tout simplement pas pourquoi il est ne fonctionne pas pour moi.


Quand la page Lifecycle est-elle votre méthode pour attribuer l'appel?


Consultez la solution ici, vous devez suivre la case de sélection de sélection Highoncoding.com/articles/...


3 Réponses :


14
votes

Je pense que ce que vous manquez, c'est que lorsque vous cliquez sur le bouton et que votre page est post-planche, vous devez vous attaquer à GridView, vous devez vous attacher dans cette condition comme

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


1 commentaires

Vous avez raison, je viens de mettre un point de rupture sur la méthode de recherche et on l'appelle à nouveau. Je vais devoir suivre là où il est appelé.



1
votes

Sur un post-pack, le contenu de la grille d'entretien est recréé à partir des données de la visualisation du post-pack entre page_Init et page_load. Essayez peut-être d'examiner votre gridview en page_load pour voir ce qui est là.


0 commentaires

0
votes

Définissez l'attribut AutoPostback de la case à cocher

AutoPostBack="true" 


0 commentaires