我的页面上有GridView
,button_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,但那里没有太多细节。
答案 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>');
}