动态绑定asp.net gridview列表单文本框值

时间:2017-01-14 18:56:32

标签: c# asp.net gridview

我想从textbox值绑定gridview列,例如:我有两个文本框和一个按钮我想要的是我将在两个文本框中输入,当我单击按钮时,文本框值将显示在gridviw中并且想要多次执行此操作而不替换以前的值。

我找到了很多相关的答案,但所有这些都是通过按钮点击事件中的硬编码完成的。

protected void Button1_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Name",  
    typeof(string)),
    new DataColumn("Age", typeof(decimal)) });
    dt.Rows.Add(TextBox1.Text, TextBox2.Text);
    GridView1.DataSource = dt;
    GridView1.DataBind()
}

当我插入新值时替换以前的值,但我想保留我卡住的所有先前值。谢谢

2 个答案:

答案 0 :(得分:1)

此代码将帮助您从gridview获取当前数据到datatable 然后你可以相应地添加新行。

protected void Button1_Click(object sender, EventArgs e)
    {
    DataTable dt =GetGridData();
    dr = dt.NewRow();
    dt.Rows.Add(TextBox1.Text, TextBox2.Text);
    GridView1.DataSource = dt;
    GridView1.DataBind();
    }

  private DataTable GetGridData ()
  {
   DataTable _datatable = new DataTable();
   for (int i = 0; i < grdReport.Columns.Count; i++)
   {
    _datatable.Columns.Add(grdReport.Columns[i].ToString());
   }
foreach (GridViewRow row in grdReport.Rows)
{
    DataRow dr = _datatable.NewRow();
    for (int j = 0; j < grdReport.Columns.Count; j++)
    {
        if (!row.Cells[j].Text.Equals("&nbsp;"))
            dr[grdReport.Columns[j].ToString()] = row.Cells[j].Text;
    }

    _datatable.Rows.Add(dr);
  }
return _dataTable;
}

答案 1 :(得分:0)

您可以将每个PostBack的值存储到会话或ViewState中,否则当再次点击该按钮时,您将丢失所有数据。

protected void Button1_Click(object sender, EventArgs e)
{
    DataTable dt;

    //check if the datatable already exists in the viewstate, if not create a new datatable
    if (ViewState["myTable"] == null)
    {
        dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Name", typeof(string)), new DataColumn("Age", typeof(decimal)) });
    }
    else
    {
        //correct viewstate exists, cast back to a datatable
        dt = ViewState["myTable"] as DataTable;
    }

    //add the new values
    dt.Rows.Add(TextBox1.Text, Convert.ToDecimal(TextBox2.Text));

    //bind the datatable to the gridview
    GridView1.DataSource = dt;
    GridView1.DataBind();

    //save the datatable into the viewstate
    ViewState["myTable"] = dt;

    //clear the textboxes
    TextBox1.Text = "";
    TextBox2.Text = "";
}