Domanda

sto ottenendo il seguente errore dopo che ho avviare il debug il mio programma. Sapete come risolvere questo problema?

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

Si riferisce alla linea:

pnlDropDownList.Controls.Add(ddl);

all'interno del metodo CreateDropDownLists. Apparentemente il ddl deve essere un oggetto nullo, anche se inizializzato ddl prima in questo stesso metodo. Capisci perché sto ricevendo questo errore? Vedere codice qui sotto ...

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

}
}
È stato utile?

Soluzione

Credo che sia facendo riferimento a "pnlDropDownList" essere un oggetto nullo. Tale funzione deve essere sempre chiamato prima "pnlDropDownList = new Panel ();" in "OnPreLoad". Utilizzare i punti di interruzione per scorrere la fonte e seguire il codice-percorso. Sono sicuro che troverete questo è il caso.

Altri suggerimenti

Si potrebbe desiderare di provare a creare i controlli dinamici in PreInit, ho la sensazione che il gruppo non è ancora stato inizializzato e quindi l'eccezione Controlla la Pagina Lifecycle

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top