我知道ASP.NET页面生命周期,但我很困惑。我这里有代码从数据库记录创建按钮。点击它们后,它们消失,没有触发代码。 :(我知道我必须在Page_Init中重新创建它们,但我不知道如何。请帮助!这是我的代码:
try
{
con.Open();
SqlDataReader myReader = null;
SqlCommand myCom = new SqlCommand("select ID,client from tposClient where CardNo='" + cNo + "'", con);
myReader = myCom.ExecuteReader();
Panel panel1 = new Panel();
panel1.Style["text-align"] = "Center";
panel1.Style["background"] = "blue";
div_login.Visible = false;
while (myReader.Read())
{
string b = myReader["client"].ToString();
string id = myReader["ID"].ToString();
Button btn = new Button();
btn.Text = b;
btn.ID = id;
btn.Style["width"] = "100px";
btn.Click += new EventHandler(btn_Click);
panel1.Controls.Add(btn);
panel1.Controls.Add(new LiteralControl("<br />"));
form1.Style.Add("display", "block");
form1.Controls.Add(panel1);
}
}
catch (Exception k)
{
Console.WriteLine(k.ToString());
}
finally
{
cmdselect.Dispose();
if (con != null)
{
con.Close();
}
}
答案 0 :(得分:1)
您应该将Button
放在ListView
控件内,该控件将重复您获得的每个结果。以这种方式使用按钮会更容易,而且您不必处理在每个Postback
上重新创建控件。
创建一个ListView,里面有一个按钮
<asp:ListView ID="lv1" runat="server" OnItemDataBound="lv1_ItemDataBound">
<ItemTemplate>
<asp:Button ID="btn1" runat="server" Text="my Text />
</ItemTemplate>
</asp:ListView>
在您进行数据访问后,创建一个Dictionary<string, string>
来保存每个按钮的文本和ID,然后您可以使用它来绑定ListView
。
//Your data access code
Dictionary<string, string> buttonIdsWithText = new Dictionary<string, string>();
while(myReader.Read())
{
string buttonText = myReader["client"].ToString();
string buttonId = myReader["ID"].ToString();
buttonIdsWithText.Add(buttonId, buttonText);
}
lv1.DataSource = buttonIdsWithText;
lv1.DataBind();
创建一个ItemDataBound
事件处理程序,以便设置按钮文本
public void lv1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType != ListViewItemType.DataItem)
{
return;
}
KeyValuePair<string, string> idWithText =
(KeyValuePair<string, string>)e.Item.DataItem;
Button myButton = e.Item.FindControl("btn1") as Button;
myButton.Text = idWithText.Value;
}
如果您需要将按钮ID专门设置为您从数据库获取的ID(并且您使用的是.NET 4),则可以将按钮的ClientIDMode
设置为Static
并设置ID到你想要的身份。