2011-10-28 15 views
1

私はこれについて約1日ほど頭を悩まされており、何か助けが必要です。私はGridViewを持っており、データベースフィールドに基づいて行のバックカラーを変更したいと思います。 dbフィールドは「非アクティブ」です。ここでオブジェクトがオブジェクトのインスタンスに設定されていない

は、マークアップである:ここでは

<asp:GridView ID="GridView1" runat="server" DataSourceID="WishListDS" AutoGenerateColumns="false" CssClass="WishListGridView" GridLines="None" OnRowDataBound="WishListGV_RowDataBound"> 
    <Columns>  
     <asp:TemplateField> 
      <ItemTemplate> 
       <div class="wlMessage"> 
        <asp:Hyperlink ID="ViewHL" runat="server" Text="View" NavigateUrl='<%# "WishListSearchResults.aspx?id=" + Eval("sysid")%>' /> 
        <asp:Hyperlink ID="EditHL" runat="server" Text="Edit" NavigateUrl='<%# "WishListEdit.aspx?id=" + Eval("sysid")%>' /> 
       </div> 
       <asp:Hyperlink ID="NameLBL" Runat="server" Text='<%# Eval("customName")%>' NavigateUrl='<%# "WishListSearchResults.aspx?id=" + Eval("sysid")%>' CssClass="wlGVContentTitle" /> 
       <asp:Label ID="ArrivalLBL" Runat="server" Text='<%# Eval("earliestArrival","{0:d}") + " - " + Eval("latestArrival","{0:d}")%>' CssClass="wlGVContent" /> 
       <asp:Label ID="StateLBL" Runat="server" Text='<%# Eval("City") + ", " + Eval("State")%>' CssClass="wlGVContent"></asp:Label> 
       <asp:HiddenField ID="InactiveHF" runat="server" value='<%# Eval("InActive") %>' /> 
       <hr />    
      </ItemTemplate> 
     </asp:TemplateField>    
    </Columns> 
</asp:GridView> 

コードは次のとおりです。

protected void WishListGV_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     HiddenField hf = (HiddenField)e.Row.FindControl("InActiveHF"); 
     if (hf.Value == "True") 
     { 
     } 
    } 
} 

私はエラーを取得する:

Object reference not set to an instance of an object."

ライン

if (hf.Value == "True") 

これはなぜ起こっているのですか?

答えて

2

とNullReferenceExceptionを防ぐために、ヌルに対するチェック:これを使用し

HiddenField hf = (HiddenField)e.Row.FindControl("id"); 
if (hf != null && hf.Value == Boolean.TrueString) 
{ 
} 
else 
{ 
    // handle on your own, e.g.: 
    throw new InvalidOperationException("Control not found"); 
} 
+0

あなたが働いていた答え!ありがとう! – Enrico

+0

@ user1018535:喜んで助けました:) [参照](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – abatishchev

+0

..このメソッドも非常にエラーを簡単に隠すことができるので、例外をスローしないでも静かに動作することはありません。*期待通りに動作しません。* FindControlはnullを返すことができる私の経験では発生*)。この場合、この解決策/アプローチ[可能性] **は、有効なプログラミングエラーが報告されないようにします**。 –

5

マークアップのHiddenFieldのIDとコードの間に不一致があります。 、一般的な場合には

HiddenField hf = (HiddenField)e.Row.FindControl("InactiveHF"); 
関連する問題