簡體   English   中英

GridView asp.net 中的按鈕

[英]Button in GridView asp.net

這是我的代碼:

protected void Page_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable(); 
    dt=PrepareFirstGridViewRow(); //function below
    DataRow dr = dt.NewRow();
    dr["Index"] = index;
    index++;
    dr["Telephone"] = Telephone;
    dr["Amount"] = Amount;
    dr["Comment"] = Comment;
    Button BTN = new Button();
    BTN.Click += GridButton_Click;
    BTN.OnClientClick = "GridButton_Click";
    BTN.Text = "Sell";
    BTN.Attributes.Add("CId", j.ToString());
    BTN.Style.Value = "display:inline-block;";
    BTNF.ButtonType = ButtonType.Button;
    dr["Sell"] = BTN;
    dt.Rows.Add(dr);
    ContractsGrid.DataSource = dt;
    ContractsGrid.DataBind();
    ContractsGrid.Columns.Add(new DataControlField);
    connection.Close();
}

和功能准備:

 private DataTable PrepareFirstGridViewRow()
 {
    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("Index", typeof(string)));
    dt.Columns.Add(new DataColumn("Telephone", typeof(string)));
    dt.Columns.Add(new DataColumn("Amount", typeof(string)));
    dt.Columns.Add(new DataColumn("Comment", typeof(string)));
    dt.Columns.Add(new DataColumn("Sell", typeof(Button)));
    return dt;
 }

一切正常,除了在最后一列中插入按鈕,它們根本不出現(標題和按鈕都沒有)。 當我用("Sell", typeof(string))dr["Sell"] = "something";替換("Sell", typeof(Button))dr["Sell"] = "something"; 網格已正確創建。

問題很簡單:為什么?

我嘗試了以下解決方案:

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
        Button btn = new Button();
        btn.Text = "Click";
        btn.ID = "btn_click";
        btn.Click += new EventHandler(btnevent_Click);
        btn.OnClientClick = "Hello('" + "a" + "')";

        form1.Controls.Add(btn);
    }
    catch (Exception)
    { }
}

上面的代碼雖然在 page_load 事件中,但在頁面事件上生成按鈕。 所以問題一定不是關於事件,而是網格視圖。

下面的代碼也工作得很好,但按鈕被添加到整個網格(我意識到這一點)。 所以這不是關於事件,而是將按鈕插入網格。

Button BTNo = new Button();
BTNo.Click += GridButton_Click;
BTNo.OnClientClick = "GridButton_Click";
BTNo.Text = "Sell";
BTNo.Attributes.Add("CId", "1");
BTNo.Style.Value = "display:block;";
ContractsGrid.DataSource = dt;
ContractsGrid.DataBind();
ContractsGrid.Controls.Add(BTNo);
connection.Close();

這是因為asp.net 頁面生命周期。 在“page_load”事件之前創建控件。 嘗試在較早的事件中創建按鈕,例如“page_init”。

解決方案是不要使用數據表,gridview 也是一個壞主意,我努力找到正確的代碼行組合是不夠的,所以我找到了一個半解決方案:你可以用簡單的 asp.net table 組件替換 gridview,你可以簡而言之。 它沒有按照我想要的方式解決問題,但它可以工作並且比數據表更清晰並將其綁定到網格視圖。

這是工作代碼:

TableRow tRow = new TableRow()
Tab.Rows.Add(tRow);
Tab.Rows.Add(tRow);
// Create a new cell and add it to the row.
TableCell tCell = new TableCell();
tCell.Text = "Row ";
Button bt = new Button();
bt.Text = "Click Me";
bt.OnClientClick = "TabButton_Click";
tCell.Controls.Add(bt);
tRow.Cells.Add(tCell);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM