2013-03-03 99 views
1

我費盡上試圖在用戶選擇一個複選框來訪問GridView控件的ID列我的腦子:返回GridView的複選框布爾

<asp:GridView ID="gvUserFiles" runat="server"> 
      <Columns> 
      <asp:TemplateField HeaderText="Select" ItemStyle-HorizontalAlign="Center" > 
       <ItemTemplate> 
        <asp:CheckBox ID="chkSelect" runat="server" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 

在GridView列chkSelect(複選框),ID,文件名, CreateDate

當用戶選中複選框並按下按鈕時,我想要接收「id」列值。

這裏是我的按鈕代碼:

foreach (GridViewRow row in gvUserFiles.Rows) 
      { 
       var test1 = row.Cells[0].FindControl("chkSelect"); 
       CheckBox cb = (CheckBox)(row.Cells[0].FindControl("chkSelect")); 
       //chk = (CheckBox)(rowItem.Cells[0].FindControl("chk1")); 
       if (cb != null && cb.Checked) 
       { 
        bool test = true; 

       } 
      } 

的cb.checked總是返回false。

回答

3

複選框是始終選中可以是實現它DataBinding的問題。確保在調用按鈕單擊事件之前,您不是數據綁定GridView。有時,人們在Page_load事件上粘貼DataBinding,然後每隔PostBack保留DataBinding。在點擊按鈕之前調用它,可以產生直接影響。 當GridView是DataBound時,您將失去來自頁面的所有狀態。

如果您在Page_load數據綁定的GridView,其包裝檢驗!IsPostBack

if (!IsPostBack) 
{ 
    gvUserFiles.DataSource = data; 
    gvUserFiles.DataBind(); 
} 

如果不是你的話,你可以嘗試基礎上,Request.Form值驗證檢查屬性:

protected void button_OnClick(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in gvUserFiles.Rows) 
    { 
     CheckBox cb = (CheckBox)row.FindControl("chkSelect"); 

     if (cb != null) 
     { 
      bool ckbChecked = Request.Form[cb.UniqueID] == "on"; 

      if (ckbChecked) 
      { 
       //do stuff 
      } 
     } 
    } 
} 

CheckBoxChecked值由瀏覽器發送,值爲"on"。如果沒有在瀏覽器中檢查,請求中沒有任何內容。

+0

好吧,我絕對是page_load上的數據綁定。那麼我應該如何將數據綁定到gridview呢? – 2013-03-03 14:41:17

+0

好吧,用 'gvResults.DataSource = UserResults; gvResults.DataBind();' 在一個'if(!Page.PostBack)'中,它工作。你太棒了! – 2013-03-03 14:50:37

+0

@蒂姆約翰遜,對不起,我應該在答案上發佈正確的方式,我只是不知道這是問題所在。如果它適合您的需求,您可以接受它作爲答案。我更新了答案。 – 2013-03-03 15:15:26

1

可以使用datakey這樣

添加Datakey到你的GridView

<asp:GridView ID="gvUserFiles" runat="server" DataKeyNames="Id"> 

,並得到它的服務器端這樣

string value = Convert.ToString(this.gvUserFiles.DataKeys[rowIndex]["Id"]);