1

I'm getting the following error after I start debugging my program. Do you know how to fix this?

System.NullReferenceException was unhandled by user code
Message="Object reference not set to an instance of an object."

It is referring to the line:

pnlDropDownList.Controls.Add(ddl);

inside the CreateDropDownLists method. Apparently the ddl must be a null object, even though I initialized ddl just before in this same method. Do you understand why I am receiving this error? See code below...

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ADONET_namespace;
using MatrixApp;

namespace AddFileToSQL
{
public partial class DataMatch : _Default
{

protected System.Web.UI.WebControls.PlaceHolder phTextBoxes;
protected System.Web.UI.WebControls.PlaceHolder phDropDownLists;
protected System.Web.UI.WebControls.Button btnAnotherRequest;
protected System.Web.UI.WebControls.Panel pnlCreateData;
protected System.Web.UI.WebControls.Literal lTextData;
protected System.Web.UI.WebControls.Panel pnlDisplayData;
Panel pnlDropDownList;
protected static string inputfile2;
static string[] headers = null;
static string[] data = null;
static string[] data2 = null;
static DataTable myInputFile = new DataTable("MyInputFile");
static string[] myUserSelections;

// a Property that manages a counter stored in ViewState
protected int NumberOfControls
{
get { return (int)ViewState["NumControls"]; }
set { ViewState["NumControls"] = value; }
}

public void EditRecord(object recordID)
{
SelectedRecordID = recordID;
// Load record from database and show in control
}

protected object SelectedRecordID
{
get
{
return ViewState["SelectedRecordID"];
}

set
{
ViewState["SelectedRecordID"] = value;
}
}

protected void OnPreLoad(object sender, EventArgs e)
{

//Create a Dynamic Panel
pnlDropDownList = new Panel();
pnlDropDownList.ID = "pnlDropDownList";
pnlDropDownList.BorderWidth = 1;
pnlDropDownList.Width = 300;
this.form1.Controls.Add(pnlDropDownList);
}

// Page Load 
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
this.NumberOfControls = 0;
}
}

// Add DropDownList Control to Placeholder
private void CreateDropDownLists()
{
for (int counter = 0; counter < NumberOfControls; counter++)
{
DropDownList ddl = new DropDownList();
SqlDataReader dr = ADONET_methods.DisplayTableColumns(targettable);
ddl.ID = "DropDownListID" + (counter + 1).ToString();
ddl.DataTextField = "COLUMN_NAME";
ddl.DataValueField = "COLUMN_NAME";
ddl.DataSource = dr;
ddl.DataBind();
ddl.AutoPostBack = true;
ddl.EnableViewState = true; //Preserves View State info on Postbacks
ddl.Style["position"] = "absolute";
ddl.Style["top"] = 100 * counter + 80 + "px";
ddl.Style["left"] = 250 + "px";
ddl.SelectedIndexChanged += new EventHandler(this.OnSelectedIndexChanged);
pnlDropDownList.Controls.Add(ddl);
pnlDropDownList.Controls.Add(new LiteralControl("<br><br><br>"));
dr.Close();
}
}

private void CreateLabels()
{
for (int counter = 0; counter < NumberOfControls; counter++)
{
Label lbl = new Label();
lbl.ID = "Label" + counter.ToString();
lbl.Text = headers[counter];
lbl.Style["position"] = "absolute";
lbl.Style["top"] = 100 * counter + 50 + "px";
lbl.Style["left"] = 250 + "px";
pnlDropDownList.Controls.Add(lbl);
pnlDropDownList.Controls.Add(new LiteralControl("<br><br><br>"));
}
}

// Add TextBoxes Control to Placeholder
private void RecreateDropDownLists()
{
for (int counter = 0; counter < NumberOfControls; counter++)
{
DropDownList ddl = new DropDownList();
SqlDataReader dr = ADONET_methods.DisplayTableColumns(targettable);
ddl.ID = "DropDownListID" + (counter + 1).ToString();
ddl.DataTextField = "COLUMN_NAME";
ddl.DataValueField = "COLUMN_NAME";
ddl.DataSource = dr;
ddl.DataBind();
myUserSelections[counter] = "";
dr.Close();
ddl.AutoPostBack = true;
ddl.EnableViewState = false; //Preserves View State info on Postbacks
ddl.Style["position"] = "absolute";
ddl.Style["top"] = 100 * counter + 80 + "px";
ddl.Style["left"] = 250 + "px";
pnlDropDownList.Controls.Add(ddl);
pnlDropDownList.Controls.Add(new LiteralControl("<br><br><br>"));
}
}

// Create TextBoxes and DropDownList data here on postback.
protected override void CreateChildControls()
{
// create the child controls if the server control does not contains child controls
this.EnsureChildControls();
// Creates a new ControlCollection. 
this.CreateControlCollection();
// Here we are recreating controls to persist the ViewState on every post back

if (Page.IsPostBack)
{
RecreateDropDownLists();
RecreateLabels();
}

// Create these conrols when asp.net page is created
else
{
PopulateFileInputTable();
CreateDropDownLists();
CreateLabels();
}

// Prevent child controls from being created again.
this.ChildControlsCreated = true;
}

private void AppendRecords()
{
switch (targettable)
{
case "ContactType":
for (int r = 0; r < myInputFile.Rows.Count; r++)
{ ADONET_methods.AppendDataCT(myInputFile.Rows[r]); }
break;
case "Contact":
for (int r = 0; r < myInputFile.Rows.Count; r++)
{ ADONET_methods.AppendDataC(myInputFile.Rows[r]); }
break;
case "AddressType":
for (int r = 0; r < myInputFile.Rows.Count; r++)
{ ADONET_methods.AppendDataAT(myInputFile.Rows[r]); }
break;

default: throw new ArgumentOutOfRangeException("targettable type", targettable);
}
}

// Read all the data from TextBoxes and DropDownLists 
protected void btnSubmit_Click(object sender, System.EventArgs e)
{
int cnt = FindOccurence("DropDownListID");
EditRecord("DropDownListID" + Convert.ToString(cnt + 1));
AppendRecords();
pnlDisplayData.Visible = false;
}

private int FindOccurence(string substr)
{
string reqstr = Request.Form.ToString();
return ((reqstr.Length - reqstr.Replace(substr, "").Length) / substr.Length);
}

#region Web Form Designer generated code

override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}

private void InitializeComponent()
{
(this.btnSubmit_Click);
}

#endregion

}
}

2 Answers 2

3

I think it's referring to "pnlDropDownList" being a Null object. That function must be getting called before "pnlDropDownList = new Panel();" in "OnPreLoad". Use breakpoints to step through the source and follow the code-path. I'm sure you'll find this is the case.

Sign up to request clarification or add additional context in comments.

2 Comments

If that's the case, it can be solved by initializing pnlDropDownList in the constructor, instead of an event.
@Martinho, thanks I should have offered a solution as well as stating the problem.
1

You might want to try creating your dynamic controls in PreInit, I have a hunch that the Panel has not yet been initialized and hence the exception Check out the Page Lifecycle

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.