2013-01-02 142 views
2

在这里输入代码我在GridView模板中有一个CheckBox。当检测到CheckBox时,它应该将列值发送到存储过程,并在另一个gridview中显示所需的结果。 当两个复选框被选中时,两列的值应该显示在另一个gridview中。在gridview中选择多个复选框

我的问题是,单击第二个复选框将删除第一个复选框的值,并且仅导致第二个复选框的值显示在另一个gridview中。

protected void ChkRule_CheckedChanged(object sender, EventArgs e) 
    { 
     StringCollection sc = new StringCollection(); 

     for (int i = 0; i < gdYojnaDtl.Rows.Count; i++) 
     { 

      string yojnaNo = ""; 
      CheckBox chl = (CheckBox)gdYojnaDtl.Rows[i].Cells[0].FindControl("CheckBox1"); 
      //CheckBox chl = (CheckBox)sender; 
      if (chl != null) 
      { 
       if (chl.Checked == true) 
       { 




        int rowsNo = (Convert.ToInt16(chl.ToolTip) - 1); 
        yojnaNo = ((Label)gdYojnaDtl.Rows[rowsNo].FindControl("lblYojnaNo")).Text; 
        sc.Add(yojnaNo); 


       } 

      } 
     } 

    foreach (string obj in sc) 
    { 

     objyojnadetail4.YojnaNo = obj; 
     DataTable city = objyojnadetail4.Selectcity(); 
     gdCityDetail.DataSource = city; 



     gdCityDetail.DataBind(); 

    } 

} 





<Columns> 
         <asp:TemplateField HeaderText="Scheme Code"> 
         <ItemTemplate> 
          <asp:Label ID="lblYojnaNo" runat="server" Text='<%#Eval("Yojna_No")%>' /> 

         </ItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="Scheme Name"> 
         <ItemTemplate> 
        <asp:Label ID="lblYojnaName" runat="server" Text='<%#Eval("Yojna_Name")%>' /> 

         </ItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="Assistant Name"> 
         <ItemTemplate> 
         <asp:Label ID="lblAsstName" runat="server" Text=' <%#Eval("Asst_Name")%>' /> 

         </ItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="Select for City"> 
         <ItemTemplate> 
       <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" 
        oncheckedchanged="ChkRule_CheckedChanged" 
        ToolTip="<%#Container.DataItemIndex+1 %> " CommandName="cbCity"/> 





         </ItemTemplate> 
         </asp:TemplateField> 

        </Columns> 
+3

你重装了'GridView'从'Page_Load'回发?使用这个:'if(!Page.IsPostBack)DataBindGrid();'。 –

+0

@tim数据没有在网格视图中通过你的解决方案获得绑定 – Himanshu

+0

它应该工作,因为'ViewState'是默认启用的。如果在每次回发中重新加载网格,则可防止触发事件并覆盖更改的值(如“CheckBox.Checked”)。 –

回答

0
//**This code is tested and working fine** 
//at aspx page 
<columns> 
<asp:TemplateField HeaderText="Checkboxes"> 
     <ItemTemplate> 
      <asp:CheckBox ID="cheker" runat="server" /> 
     </ItemTemplate> 
</asp:TemplateField> 
</Columns> 

//this button is outside gridview but in same page 
<asp:Button ID="check" runat="server" CssClass="btnstyle" Text="Check"  OnClick="btnredirect_Click" /> 

//在代码隐藏点击事件方法

protected void btnredirect_Click(object sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    switch (btn.ID) 
    { 
     case "check": 
      { 
       for(int i=0;i<Gvshowcart.Rows.Count; i++) 
       { 
        CheckBox chl =  (CheckBox)Gvshowcart.Rows[i].Cells[0].FindControl("cheker"); 
        if (chl != null) 
        { 
         if (chl.Checked == true) 
         { 
          chl.Checked = false; 
         } 
         else 
         { 
          chl.Checked = true; 
         } 
        } 

       } 

      } 
      break; 
    } 

}