0

2 つのテキスト ボックスと 1 つのボタンがあります。ボタン クリック イベントでは、テキスト ボックスでキャプチャされた値を grdiview の新しい行として追加します。今私が欲しいのは、ページが再びロードされると、グリッドビューに追加した既存のデータが表示され、データベースを使用せずに新しいレコードが追加されることです。

これが私のコードです:

private void BindGrid(int rowcount)
{
    DataTable dt = new DataTable();
    DataRow dr;

    dt.Columns.Add("First Name", typeof(String));
    dt.Columns.Add("Last Name", typeof(String));

    if (ViewState["CurrentData"] != null)
    {
        for (int i = 0; i < rowcount + 1; i++)
        {
            dt = (DataTable)ViewState["CurrentData"];
            if (dt.Rows.Count > 0)
            {
                dr = dt.NewRow();
                dr[0] = dt.Rows[0][0].ToString();

            }
        }
        dr = dt.NewRow();
        dr[0] = TextBox1.Text;
        dr[1] = TextBox2.Text;
        dt.Rows.Add(dr);
    }
    else
    {
        dr = dt.NewRow();
        dr[0] = TextBox1.Text;
        dr[1] = TextBox2.Text;

        dt.Rows.Add(dr);
    }

    // If ViewState has a data then use the value as the DataSource
    if (ViewState["CurrentData"] != null)
    {
        GridView1.DataSource = (DataTable)ViewState["CurrentData"];
        GridView1.DataBind();
    }
    else
    {
        // Bind GridView with the initial data assocaited in the DataTable
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
    // Store the DataTable in ViewState to retain the values
    ViewState["CurrentData"] = dt;
}

ボタンクリックイベント:

protected void Button1_Click(object sender, EventArgs e)
{
    // Check if the ViewState has a data assoiciated within it. If
    if (ViewState["CurrentData"] != null)
    {
        DataTable dt = (DataTable)ViewState["CurrentData"];
        int count = dt.Rows.Count;
        BindGrid(count);
    }
    else
    {
        BindGrid(1);
    }
    TextBox1.Text = string.Empty;
    TextBox2.Text = string.Empty;
    TextBox1.Focus();
}

これは私の ASPX ページです:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs"   Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
     </head>
    <body>
        <form id="form1" runat="server">
       <div>

        <asp:TextBox ID="TextBox1" runat="server"/>&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:TextBox ID="TextBox2" runat="server"/>&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:Button ID="Button1" runat="server" Text="Add" OnClick="Button1_Click" />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<asp:GridView          ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" 
            GridLines="None" > <AlternatingRowStyle BackColor="White" />
            <EditRowStyle BackColor="#2461BF" />
         <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
         <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#EFF3FB" />
        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#F5F7FB" />
        <SortedAscendingHeaderStyle BackColor="#6D95E1" />
         <SortedDescendingCellStyle BackColor="#E9EBEF" />
         <SortedDescendingHeaderStyle BackColor="#4870BE" />
       </asp:GridView>

        &nbsp;</div>
        </form>
    </body>
  </html>
4

1 に答える 1

2

ここにあなたのために働くコードがあります

private void BindGrid()
{
    GridView1.DataSource = GetDataTable();
    GridView1.DataBind();
}

protected void Button1_Click(object sender, EventArgs e)
{
    DataRow dr;
    DataTable dt = GetDataTable();
    dr = dt.NewRow();
    dr[0] = TextBox1.Text;
    dr[1] = TextBox2.Text;
    dt.Rows.Add(dr);
    ViewState["CurrentData"] = dt;
    TextBox1.Text = string.Empty;
    TextBox2.Text = string.Empty;
    TextBox1.Focus();
    //**updated**
    BindGrid();
}

protected DataTable GetDataTable()
{
    DataTable dt;
    if (ViewState["CurrentData"] != null)
    {
        dt = (DataTable)ViewState["CurrentData"];
    }
    else
    {
        dt = new DataTable();
        dt.Columns.Add("First Name", typeof(String));
        dt.Columns.Add("Last Name", typeof(String));
        //**Update**/
        ViewState["CurrentData"] = dt;
    }
    return dt;
}

BindGridページの読み込み時に関数を呼び出します。

編集-1

別のページにアクセスした後に必要な場合は、 それに応じて機能を変更するのsessionではなく、使用する必要がありますviewstate

protected DataTable GetDataTable()
{
    DataTable dt;
    if (Session["CurrentData"] != null)
    {
        dt = (DataTable)Session["CurrentData"];
    }
    else
    {
        dt = new DataTable();
        dt.Columns.Add("First Name", typeof(String));
        dt.Columns.Add("Last Name", typeof(String));
        Session["CurrentData"] = dt;
    }
    return dt;
}
于 2013-02-07T09:11:26.213 に答える