2016-04-05 12 views
2

ausgewählt Ich habe Grid Wie CheckBox Wert von Gridview zu erhalten, wenn CheckBox

<asp:GridView ID="gvValues" runat="server" 
    OnRowDataBound="gvValues_RowDataBound" 
    OnPageIndexChanging="gvValues_PageIndexChanging" 
    <Columns>   
     <asp:TemplateField HeaderText="#"> 
      <ItemTemplate> 
       <%# gvValues.PageSize*gvValues.PageIndex+ Container.DisplayIndex+1 %> 
       <asp:CheckBox ID="chkProduct" runat="server" CssClass="chkProduct"/> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="online" meta:resourcekey="Online"> 
      <ItemTemplate > 
       <asp:CheckBox ID="chkProductonline" runat="server" OnCheckedChanged ="chkProductonline_CheckedChanged" AutoPostBack="true"/> 
      </ItemTemplate> 
     </asp:TemplateField> 

Was automatisch als

gefüllt ich brauche, ist, wenn ich auf das chkProductonline Kontrollkästchen klicken, um ein Ereignis zu feuern und die chkProductonline und chkProducton Werte erhalten. Ich habe das versucht, aber es gibt mir immer null.

protected void chkProductonline_CheckedChanged(object sender, EventArgs e) 
{ 
    var chkProductonline = FindControl("chkProductonline") as CheckBox; 
    // bool ischeck = chkProductonline.Checked; 

    var chkProduct = gvValues.FindControl("chkProduct") as CheckBox; 
} 

Ich kann die GridView nicht Schleife. Ich muss das eins nach dem anderen machen. Gibt es einen anderen Weg, das zu tun?

Antwort

1

Sie können dies versuchen:

protected void chkProductonline_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox chkProductonline = sender as CheckBox; 
    ... 

    CheckBox chkProduct = chkProductionLine.NamingContainer.FindControl("chkProduct") as CheckBox; 
    ... 
} 
0

Sie müssen auf Findcontrol einer bestimmten Zeile nennen. Sie können es nicht auf der gesamten GridView aufrufen, da es sich wiederholenden Inhalt gibt (d. H. Mehrere chkProductionlines und chkProducts). Eine Reihe kennt ihre Checkboxen und nicht die anderen.

Sie können also zuerst die CheckBox aufrufen, die das Ereignis aufgerufen hat (Ihr Senderparameter chkProductionline) und NamingContainer verwenden. Da es in einer GridView-Zeile enthalten ist, können Sie die Zeile als solche interpretieren, um andere Steuerelemente zu finden.

protected void chkProductonline_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox chkProductionline = (CheckBox)sender; 
    GridViewRow row = (GridViewRow)chkProductionline.NamingContainer; 

    CheckBox chkProduct = (CheckBox)row.FindControl("chkProduct"); 
}