0

我知道 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();
            }
        }
4

1 回答 1

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),则可以将按钮设置ClientIDModeStatic并将 id 设置为您想要的 id。

于 2012-09-25T15:01:43.907 回答