0

私は 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();
    }

テキストボックスにテキストを入力し、ボタンをクリックしてグリッドビューに値を挿入します。問題なく動作しますが、2 番目のステップでは、ページのポストバック後にグリッドビューの以前のデータが失われます。

グリッドビューで以前のデータを失わないようにしたい。私を助けてください。

4

2 に答える 2

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
 }
于 2013-01-10T19:02:56.117 に答える
0

ページが PostBack モードの場合、Page_Load メソッドをチェックインしていますか?

if(IsPostBack) { //Load the data for the first time }

そうでない場合、元の「古い」データはグリッドビューにバインドされます。

更新: 古いデータを再利用するには、データテーブルをセッション変数に保存し、そこからロードし、新しい行を追加して、データデータテーブルを再度バインドします。

于 2013-01-10T18:59:26.560 に答える