The Self-Taught Programmer

Recipes from real-world experience with asp.net.

Posts Tagged ‘NullReferenceException

Common Function Library – HasValue()

with one comment

Like many programmers, I have a Common Function Library containing generic methods I use over and over again. Here is one of them.

/// <summary>
/// Checks a variable to make sure it has value (isn't null or a zero-length string once trimmed).
/// </summary>
/// <param name="o">variable to test.</param>
/// <returns>true if the variable has a value.</returns>
public static bool HasValue(object o)
{
	if ( o == null )
	{
		return false;
	}

	if ( o == System.DBNull.Value )
	{
		return false;
	}

	if ( o is String )
	{
		if ( ( (String)o ).Trim() == String.Empty )
		{
			return false;
		}
	}

	return true;
}

I use this often to test if a variable or object exists and if it has any value. This is an easy way to avoid NullReferenceExceptions or other errors that would crop up if an object is null — BEFORE the exception is thrown.

Advertisements

Written by Jim McMullen

May 12, 2011 at 1:24 am

How To Avoid Null Reference Exceptions in an ASPX File When Dynamically Populating a GridView or ListView Control

leave a comment »

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.

Written by Jim McMullen

May 3, 2011 at 2:40 pm