我有一个gridview,一个按钮和一个文本框。在文本框中输入值时,在按钮上单击该值应显示在gridview中。一切顺利,直到我插入第二个值。 gridview不会创建新行并保留数据,而是刷新页面并将第二个值插入第一个值的位置。
我被告知这与页面加载有关,但我不知道如何阻止这种情况发生。
这是我的代码:
protected void Buton1_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("Name");
dt.Columns.Add(dc);
DataRow dr = dt.NewRow();
dr["Name"] = TextBox1.Text;
dt.Rows.Add(dr);
dt.AcceptChanges();
GridView1.DataSource = dt;
GridView1.DataBind();
}
答案 0 :(得分:0)
请尝试以下代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostback)
{
DataTable dt = new DataTable();
ViewState.Add("dt", dt);
}
}
protected void Buton1_Click(object sender, EventArgs e)
{
Datatable dtable = (Datatable)ViewState["dt"];
if (ViewState["dt"] == null)
{
DataColumn dc = new DataColumn("Name");
dtable.Columns.Add(dc);
}
DataRow dr = dtable.NewRow();
dr["Name"] = TextBox1.Text;
dtable.Rows.Add(dr);
dtable.AcceptChanges();
GridView1.DataSource = dtable;
GridView1.DataBind();
ViewState["dt"] = dtable;
}
答案 1 :(得分:0)
Asp.net是无状态的,所以你必须使用一些状态管理技术来管理控件的状态。例如会议
protected void Buton1_Click(object sender, EventArgs e)
{
DataTable dt =null;
if(Session["GridData"]==null)//Initialize a new session only if first time
{
dt= new DataTable();
DataColumn dc = new DataColumn("Name");
dt.Columns.Add(dc);
}
else
{
dt=Session["GridData"] as DataTable;
}
DataRow dr = dt.NewRow();
dr["Name"] = TextBox1.Text;
dt.Rows.Add(dr);
dt.AcceptChanges();
GridView1.DataSource = dt;
GridView1.DataBind();
Session["GridData"]=dt;//save data in session to retrive in next click
}
答案 2 :(得分:0)
试试这个:
Enter