The situation:
You have a GridView control with a TemplateField in your ASPX page that is dynamically populated from a database. You of course use an Eval() statement to dynamically populate the TemplateField, but the db field is nullable (and in fact contains a null value), and when you run the page, you get an NullReferenceException because you are trying to bind to a null value.
This is your basic (simplified) code that is causing the error (because “Cost” is null):
<asp:GridView id="MyGridView"
DataSourceID="MyDataSource1"
Runat="Server">
<Columns>
<asp:TemplateField HeaderText="Cost">
<ItemTemplate>
<%# Eval("Cost") %>
</ItemTemplate>
</asp:TemplateField>
</Columns
</asp:GridView>
Here is the fix: Add this method to your codebehind:
protected string CheckNull(object objGrid)
{
if ( object.ReferenceEquals(objGrid, DBNull.Value) )
{
return "not available";
}
else if ( objGrid == null )
{
return "not available";
}
else
{
return objGrid.ToString();
}
}
You can change “not available” to any value you wish.
Then your template field should be changed to:
<%# CheckNull(Eval("Cost")) %>
And that should fix the issue.