将新行添加到GridView

时间:2014-03-10 16:00:11

标签: asp.net gridview

我的页面上有GridViewbutton_OnClick事件我想在网格中添加新行。

我可以使用以下代码向表中添加一行,这样可以正常工作,但是当我将DataTable绑定到网格时,任何先前的条目都会丢失。

        string selectedProduct= ddlProducts.SelectedItem.Text;
        DataTable dataTable = new DataTable();

        dataTable.Columns.Add("Product");
        DataRow dataRow;

        dataRow = dataTable.NewRow();
        dataRow["Product"] = selectedProduct;
        dataTable.Rows.Add(dataRow);

        grdSelectedProducts.DataSource = dataTable;
        grdSelectedProducts.DataBind();

因此,虽然我理解为什么这会导致数据丢失,但我并不确定如何解决这个问题。

如何在保留之前添加的行的同时,在每次按键点击时向GridView添加新行?数据不存储在网格本身以外的任何地方,因此没有真正的数据源。

Add row to gridview on client side这样的选项可以使用Jquery,但我已经读过,在网格中添加/删除项目时使用它并不是一个好主意。也许那是错的?或者有Add new row to gridview,但那里没有太多细节。

3 个答案:

答案 0 :(得分:1)

您需要将产品存储到ViewState(或SessionState或数据库)中,以便它可以在回发后保留。

例如,

private DataTable ProductDataTable
{
    get { return ViewState["ProductDataTable"] as DataTable ?? new DataTable(); }
    set { ViewState["ProductDataTable"] = value; }
}

protected void AddRowButton_Click(object sender, EventArgs e)
{
    string selectedProduct = ddlProducts.SelectedItem.Text;

    // Get the data from ViewState
    DataTable dataTable = ProductDataTable;

    dataTable.Columns.Add("Product");
    DataRow dataRow;

    dataRow = dataTable.NewRow();
    dataRow["Product"] = selectedProduct;
    dataTable.Rows.Add(dataRow);

    // Save the data back to ViewState
    ProductDataTable = dataTable;

    grdSelectedProducts.DataSource = dataTable;
    grdSelectedProducts.DataBind();
}

答案 1 :(得分:0)

以下是您可以尝试的示例:

DataTable dt = new DataTable(); 
if (ViewState["CurrentTable"]!=null)
{
    dt =  (DataTable)ViewState["CurrentTable"];
  }

else
 {
     dt.Columns.Add(new DataColumn("Col1", typeof(string)));
    dt.Columns.Add(new DataColumn("Col2", typeof(string))); 
}

DataRow dr = null;            
dr = dt.NewRow();
 dr["Col1"] = "tes";      
dr["Col2"] = "test";
dt.Rows.Add(dr);

ViewState["CurrentTable"] = dt; 
GridView1.DataSource = dt; 
GridView1.DataBind();

抱歉格式不正确,请使用我的手机输入。希望能帮助到你! : - )

答案 2 :(得分:0)

// OnButten click
  function addrow(sender, args) {
       // td add as per your column required
        $("#GridView1 tbody").append('<tr><td>00001</td><td>Mr.</td><td>LOKESH N</td></tr>');
    }