2013-01-02 141 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; 
    } 

}