c#
  • asp.net
  • .net
  • gridview
  • 2013-08-28 32 views 0 likes 
    0

    我在ASP.NET GridView中,在此GridView的一列中我有以下控件:無法根據HiddenField值在GridView的ID找到複選框

    <asp:TemplateField>  
        <ItemTemplate> 
         <input id='<%#Eval("po_asn_number") %>' class="css-checkbox" type="checkbox" />              
         <label for='<%#Eval("po_asn_number") %>' name="lbl_1" class="css-label"></label>   
    
         <asp:HiddenField ID="poid" runat="server" Value='<%#Eval("po_asn_number") %>' /> 
        </ItemTemplate>      
    </asp:TemplateField> 
    

    這是我的OnClick事件守則背後。

    protected void create_Click(object sender, EventArgs e) 
    { 
        foreach (GridViewRow gvr in GridView1.Rows) 
        { 
         HiddenField poid = ((HiddenField)gvr.Cells[0].FindControl("poid")); 
    
         if (((HtmlInputCheckBox)gvr.FindControl(poid.Value)).Checked == true) 
         { 
          Response.Redirect("ShipmentDetail.aspx?id=" + poid.Value); 
         } 
         else 
         { 
          //Do nothing 
         } 
        } 
    } 
    

    我試圖先在這裏做的,我找了HiddenField該值是<input type="checkbox" />的ID。然後我檢查是否檢查了checkbox。如果是這樣,那麼做別的事情什麼也不做。

    當單擊該按鈕我得到一個錯誤:

    Object reference not set to an instance of an object

    Line 48:    if (((HtmlInputCheckBox)gvr.FindControl(checkbox)).Checked == true) 
    Line 49:    { 
    Line 50:     Response.Redirect("ShipmentDetail.aspx?id=" + poid.Value); 
    

    你可以提供任何幫助將不勝感激。

    +0

    拆分雜亂的排隊,並告訴我們哪個對象導致錯誤請。 –

    +0

    不確定你要引用哪一行,但給我的問題的控件是''我無法根據'HiddenField'的值找到這個控件 – jorame

    回答

    0

    當您循環瀏覽所有網格視圖行時,您只需查看數據行,因爲當您不指定數據行時,它將從標題行開始。你會得到例外,因爲它不能將FindControl()的結果轉換爲類型。由於名稱行中沒有此名稱的控制權,因此FindControl()返回null並且演員陣容爆炸。

    而是做到這一點:

    protected void create_Click(object sender, EventArgs e) 
    { 
        foreach (GridViewRow gvr in GridView1.Rows) 
        { 
         // Only deal with data rows, not header or footer rows, etc. 
         if (gvr.RowType == DataControlRowType.DataRow) 
         { 
          HiddenField poid = ((HiddenField)gvr.FindControl("poid")); 
    
          // Check if hidden field was found or not 
          if(poid != null) 
          { 
           if (((HtmlInputCheckBox)gvr.FindControl(poid.Value)).Checked) 
           { 
            Response.Redirect("ShipmentDetail.aspx?id=" + poid.Value); 
           } 
           else 
           { 
            //Do nothing 
           } 
          } 
         } 
        } 
    } 
    
    +0

    我做了你的推薦改變而且我仍然遇到同樣的錯誤。 – jorame

    +0

    我猜測它沒有找到你的隱藏字段,然後我更新了代碼來對'poid'隱藏字段變量設置一個保護子句。您不需要通過'Cells'集合來查找隱藏的字段控件,只需在該行上使用'FindControl()'方法即可。查看更新的答案。 –

    +0

    您使用HTML輸入而不是ASP.NET服務器控件的任何特定原因? –

    1

    添加runat屬性。

    <input id='<%#Eval("po_asn_number") %>' class="css-checkbox" type="checkbox" runat="server"/> 
    

    沒有此屬性,您無法在服務器端代碼後面的代碼中找到控件。

    此外,您還可以通過獲取Hidden field值來確定您是否獲得預期值。

    您還需要實施Karl建議使其工作的更改。

    新增加: 更改此行添加單元格[0]下面的一行:

    if (((HtmlInputCheckBox)gvr.Cells[0].FindControl(poid.Value)).Checked == true) 
    
    +0

    不確定您的斷點是什麼意思。我添加了'runat =「server」',我得到了一個不同的錯誤。 – jorame

    +0

    通過斷點我的意思是調試代碼,看看你是否在這一行得到一個值'HiddenField poid =((HiddenField)gvr.Cells [0]。FindControl(「poid」));' – Gloria

    +0

    什麼是新錯誤? – Gloria

    相關問題