Object reference not set to an instance of an object.

I have a webpage with which I'm loading data into a listbox called "ClientListBox".  The page loads without a problem when I open a Client that does not have any items that are supposed to be selected in the ClientListBox.  If there is supposed to be a client Selected, then I get the error:  Object reference not set to an instance of an object.

I've listed all of the code that this function involves and highlighted the line that gives me the error.  I'm hoping there's a simple solution that I've somehow overlooked doing something.  Thank you!


void Page_LoadComplete(object sender, EventArgs e)
    {
        if (CurrentProject != null)
        {
            SelectProjectClients(CurrentProject.Id);
        }
    }

protected void SelectProjectClients(int projectId)
    {
        ClientListBox.DataBind();
        List<string> clientList = Project.GetProjectClients(projectId);

        foreach (string client in clientList)
        {
                           ListItem item = ClientList.Items.FindByValue(client);
 ERROR----------> item.Selected = true;
        }
    }


    //Project.GetProjectClients
        public static List<string> GetProjectClients(int Id)
        {
            if (Id <= DefaultValues.GetProjectIdMinValue())
                return (new List<string>());

            DataAccess DALLayer = DataAccessHelper.GetDataAccess();
            return (DALLayer.GetProjectClients(Id));
        }


//DALLayer.GetProjectClients
        public override List<string> GetProjectClients(int Id)
        {
            if (Id <= 0)
                throw (new ArgumentOutOfRangeException("Id"));

            SqlCommand sqlCmd = new SqlCommand();
            AddParamToSQLCmd(sqlCmd, "@ProjectId", SqlDbType.Int, 0, ParameterDirection.Input, Id);
            SetCommandType(sqlCmd, CommandType.StoredProcedure, SP_PROJECT_GETPROJECTCLIENTS);
            List<string> clientList = new List<string>();
            TExecuteReaderCmd<string>(sqlCmd, TGenerateClientListFromReader<string>, ref clientList);
            return clientList;
        }

private const string SP_PROJECT_GETPROJECTCLIENTS = "GetProjectClients";

//storedprocedure
CREATE  PROCEDURE [dbo].[GetProjectClients]
      @ProjectId INT
AS

SELECT
 Clients.Name
From
 aspnet_starterkits_ProjectClients
INNER JOIN Clients ON aspnet_starterkits_ProjectClients.ClientId = Clients.ClientId
WHERE
 ProjectId=@ProjectId
SET QUOTED_IDENTIFIER OFF
delousedAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

steveberzinsCommented:
a few problems.

-you're attempting to look for a value that there is no way it's gonna be there from what I can tell
-you need to select the client id, and name in the select (in the proc), and tell the list which column is going to be the value source, and which will be the display value source
-even if the value is there, and should be found, you should code defensively, and check to make sure an object is not null before accessing/setting a property on it.
if (null != item) item.Selected = true;
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
delousedAuthor Commented:
Aggh!! woo!  

Sorry, your reply gave me the solution....thank you.  I forgot to mention that the ClientListBox has a sql data source which gets ALL of the clients in the database table.  Of course I had set the DataTextField to display"Name" DataValue Field save "ClientId".  I changed the value field to "Name" and now it works beautifully.  

thank you!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C#

From novice to tech pro — start learning today.