【问题标题】:Button in GridView asp.netGridView asp.net 中的按钮
【发布时间】:2018-02-18 00:23:36
【问题描述】:

这是我的代码:

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(Button)) 替换为("Sell", typeof(string))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 button gridview webforms


    【解决方案1】:

    这是因为 asp.net 页面生命周期。在“page_load”事件之前创建控件。尝试在“page_init”等较早的事件中创建按钮。

    【讨论】:

    • 我尝试在 preinit 和 init 事件中执行代码,仍然没有结果。 :( 网格似乎不想用按钮创建列,因为在数据绑定上有 5 个列,零:&nbsp 一:索引二:电话三:金额四:评论。
    【解决方案2】:

    解决方案是不使用datatable,gridview也是个坏主意,我努力寻找代码行的正确组合还不够,所以我找到了一个半解决方案:你可以用简单的asp.net表格组件替换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);
    

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多