在創建一個調查頁面時,此頁面從數據庫中拉出以顯示基於它們類型的問題。對於每種類型,我創建了一個用戶控件。在Page_Load
,我把在這樣的佔位符的用戶控件: - (俠諾是一個會話我設置爲0,前一個頁面上,只是爲了啓動問題順序)在動態創建的用戶控件中從文本框中檢索文本
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection Connection = DatabaseConnection.GetSurveySystemConnection();
string sqlquery = "SELECT Q.[ID], Q.[Question_Order], Q.[Question], QT.[Type_Desc] FROM [Questions] Q Inner join Question_Type QT On Q.Type_ID= QT.ID Where Q.[Survey_ID] =" + Session["Survey_ID"] + "Order by Question_Order";
SqlCommand cmd = new SqlCommand(sqlquery, Connection);
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataTable DT = new DataTable();
da.Fill(DT);
if (DT != null)
{
Session["Count"] = DT.Rows.Count;
QuestionLabel.Text = String.Format("{0}.{1}", DT.Rows[Convert.ToInt32(Session["QNO"])]["Question_Order"].ToString(), DT.Rows[Convert.ToInt32(Session["QNO"])]["Question"].ToString());
Session["Question_ID"] = DT.Rows[Convert.ToInt32(Session["QNO"])]["ID"].ToString();
if (DT.Rows[Convert.ToInt32(Session["QNO"])]["Type_Desc"].ToString() == "Multiple Choice")
{
Control uc = Page.LoadControl("UserControls/MultipleChoice.ascx");
PlaceHolder2.Controls.Add(uc);
}
else if (DT.Rows[Convert.ToInt32(Session["QNO"])]["Type_Desc"].ToString() == "Single Choice")
{
Control uc = Page.LoadControl("UserControls/SingleChoice.ascx");
PlaceHolder2.Controls.Add(uc);
}
else if (DT.Rows[Convert.ToInt32(Session["QNO"])]["Type_Desc"].ToString() == "Yes/No")
{
Control uc = Page.LoadControl("UserControls/YesOrNo.ascx");
PlaceHolder2.Controls.Add(uc);
}
else if (DT.Rows[Convert.ToInt32(Session["QNO"])]["Type_Desc"].ToString() == "Agree/Disagree")
{
Control uc = Page.LoadControl("UserControls/AgreeDisagree");
PlaceHolder2.Controls.Add(uc);
}
else if (DT.Rows[Convert.ToInt32(Session["QNO"])]["Type_Desc"].ToString() == "Rating")
{
Control uc = Page.LoadControl("UserControls/Rating.ascx");
PlaceHolder2.Controls.Add(uc);
}
else if (DT.Rows[Convert.ToInt32(Session["QNO"])]["Type_Desc"].ToString() == "Open Ended")
{
Control uc = Page.LoadControl("UserControls/OpenEnded.ascx");
PlaceHolder2.Controls.Add(uc);
}
}
}
現在,讓我們說的類型「Open Ended」,它在usercontrol
中顯示一個文本框,我想訪問這個文本框並且檢索它裏面的文本,並按下一個按鈕將它放在另一個文本框中,我在頁面上創建了一個靜態文本框,並將其命名爲ViewTextBox
。 這是我試過的: -
protected void Button1_Click(object sender, EventArgs e)
{
TextBox t = Controls[0].Controls[3].Controls[11].Controls[5].Controls[0].Controls[0] as TextBox;
ViewTextBox.Text = t.Text; //"Object reference not set to an instance of an object."
}
任何想法?我挖我的方式,通過頁面上的控制,以發現在用戶控件的文本框: -
Response.Write(Controls[0].Controls[3].Controls[11].Controls[5].Controls[0].Controls[0].ID);
和ID出現的文本即時尋找。在用戶控件的文本框被稱爲「OpenEndedTextBox」
你能告訴我爲什麼我得到「對象引用未設置爲對象的實例」。那條線上的錯誤? –
@ BasharAl-Khalili最有可能您試圖找到的控件不存在於您試圖從中獲取的索引處。這就是爲什麼我建議您創建該方法,以便您不必遍歷這些索引。 – yogi