我有一个gridview控件,我想在文本框中输入一个值并单击按钮,以便它将textbox.text中的值插入到gridview中。我使用这段代码:
<asp:TextBox ID="txtName" runat="server" ViewStateMode="Enabled"></asp:TextBox>
<br />
<asp:Button ID="btnAddName" runat="server" Text="Button"
onclick="btnAddName_Click" />
<br />
<br />
<asp:GridView ID="gvName" runat="server" ViewStateMode="Enabled">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblName" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
和
protected void btnAddName_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("lblName", typeof(string)));
DataRow _dr = dt.NewRow();
_dr["lblName"] = txtName.Text;
dt.Rows.Add(_dr);
gvName.DataSource = dt;
gvName.DataBind();
}
我在文本框中输入文本,然后单击按钮将值插入gridview。它工作正常,但在第二步,页面回发后它丢失了gridview中的先前数据。
我希望不会丢失gridview中的先前数据。请帮帮我。
答案 0 :(得分:1)
您需要向绑定到GridView
的原始来源添加行。如果您在每次单击按钮并将其绑定到gridview
时创建新表,它将显示来自新DataTable
和旧数据的数据。
试试这个
protected void btnAddName_Click(object sender, EventArgs e)
{
DataTable dt;
if(Session["dt"] == null)
{
dt = new DataTable();
dt.Columns.Add(new DataColumn("lblName", typeof(string)));
}
else
{
dt = (DataTable)Session["dt"];
}
DataRow _dr = dt.NewRow();
_dr["lblName"] = txtName.Text;
dt.Rows.Add(_dr);
gvName.DataSource = dt;
gvName.DataBind();
Session["dt"] = dt;
//store dt in session so that you can reuse it again after postback
}
答案 1 :(得分:0)
如果您的网页处于PostBack模式,您是否正在检查Page_Load方法?
if(IsPostBack) { //Load the data for the first time }
如果没有,您的原始和“旧”数据将绑定到gridview。
<强>更新强> 要重用旧数据,请将数据表存储在会话变量中,从那里加载,添加新行并再次绑定数据数据。