[英]ASP.Net C# - Access dynamically generated List controls
根據數據庫中字段“類型”的值,我想生成一個CheckBoxList(如果“類型”為C)或一個RadioButtonList(如果“類型”為R),然后相應地填充它們。 我已經設法創建了必要的控件,但是,在populateAnswers方法中,我不確定如何訪問新創建的控件。 您可以從下面的代碼中看到我嘗試過的代碼
((CheckBoxList)this.FindControl("cblAnswers"))
但這不起作用。 任何幫助將不勝感激。
碼:
protected void Button1_Click(object sender, EventArgs e)
{
string connStr = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
MySqlConnection conn = new MySqlConnection(connStr);
MySqlDataReader reader;
List<string> listOfAnswerIDs = new List<string>();
List<string> listOfAnswers = new List<string>();
List<string> listOfCorrectAnswerIDs = new List<string>();
try
{
conn.Open();
string cmdText = "SELECT * FROM questions_m WHERE question_id=1";
MySqlCommand cmd = new MySqlCommand(cmdText, conn);
reader = cmd.ExecuteReader();
if (reader.Read())
{
lblQuestion.Text = reader["question"].ToString();
if (reader["type"].ToString().Equals("C"))
{
CheckBoxList cblAnswers = new CheckBoxList();
Page.Form.Controls.Add(cblAnswers);
}
else if (reader["type"].ToString().Equals("R"))
{
RadioButtonList rblAnswers = new RadioButtonList();
Page.Form.Controls.Add(rblAnswers);
}
ViewState["QuestionID"] = reader["question_id"].ToString();
reader.Close();
string cmdText2 = "SELECT * FROM answers_m WHERE question_id=1";
MySqlCommand cmdAnswers = new MySqlCommand(cmdText2, conn);
reader = cmdAnswers.ExecuteReader();
while (reader.Read())
{
listOfAnswerIDs.Add(reader["answer_id"].ToString());
listOfAnswers.Add(reader["answer"].ToString());
if (reader["correct"].ToString().Equals("Y"))
{
listOfCorrectAnswerIDs.Add(reader["answer_id"].ToString());
}
}
reader.Close();
populateAnswers(listOfAnswers, listOfAnswerIDs);
}
else
{
reader.Close();
lblError.Text = "(no questions found)";
}
ViewState["listOfCorrectAnswerIDs"] = listOfCorrectAnswerIDs;
}
catch
{
lblError.Text = "Database connection error - failed to read records.";
}
finally
{
conn.Close();
}
}
private void populateAnswers(List<string> listOfAnswers, List<string> listOfAnswerIDs)
{
Random ran = new Random(Guid.NewGuid().GetHashCode());
var numbers = Enumerable.Range(1, listOfAnswers.Count).OrderBy(j => ran.Next()).ToList();
List<ListItem> ans = new List<ListItem>();
for (int i = 0; i < listOfAnswers.Count; i++)
{
ans.Add(new ListItem(listOfAnswers[i].ToString(), listOfAnswerIDs[i].ToString()));
}
foreach (int num in numbers)
{
((CheckBoxList)this.FindControl("cblAnswers")).Items.Add(ans[num - 1]);
}
}
創建CheckBoxList或RadioButtonList時,請嘗試給它們提供一個ID。 當您使用FindControl()時,它將查找具有傳遞給您的特定ID的控件。
CheckBoxList cblAnswers = new CheckBoxList();
cblAnswers.ID = "cblAnswers";
Page.Form.Controls.Add(cblAnswers);
RadioButtonList rblAnswers = new RadioButtonList();
rblAnswers.ID = "rblAnswers";
Page.Form.Controls.Add(rblAnswers);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.