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))时,将正确创建网格。

问题很简单:为什么?

我尝试了以下解决方案:

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表组件的GridView,您可以简单地放入nthing。它不能像我想要的那样解决问题,但是它起作用,并且比数据表更清晰,并将其绑定到GridViews。

这是工作代码:

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);

最新更新