0

次のようなソリューションが必要です。ユーザーが GridData に情報を表示する場合にのみ、バックエンド データベース、Xml、Excel はありません。.aspx.csテーブルと列に動的に作成するだけ...

例えば: -

Name |-Text box-| Button

グリッドビュー

ユーザーがページにアクセスしたとき..上記の Name with TextBox と Submit Button 。

ユーザーが TextBox に名前を入力して送信をクリックすると、その名前をグリッドに追加したいのですが、ここでは、表示されたデータだけでなく、以前の入力データも Gridview に表示されます。

例2:-

sairam  submit--->click
pamidi  submit-->click 

このように、グリッドビューに表示したいユーザーが入力した値の数を表示したい

sairam
pamidi
some....
more...
values..

ユーザーがブラウザを閉じるまで。

info.aspx:

<form id="form1" runat="server">
    <div>
    <asp:Label ID="Label1" runat="server" Text="Enter Name"></asp:Label>
      <asp:TextBox  ID="TextBox1" runat="server"></asp:TextBox>
      <asp:Button ID="btnSumbit"  runat="server" Text="Submit" 
            onclick="btnSumbit_Click" />
      <asp:GridView ID="aspGrid1" runat="server" AutoGenerateColumns="false"  >

       <Columns>
       <asp:TemplateField>
       <ItemTemplate>
       <%#Eval("Name") %>
       </ItemTemplate>
       </asp:TemplateField>
       </Columns>
      </asp:GridView>
</div>
</form>

info.aspx.cs:

public partial class Default6 : System.Web.UI.Page
{
    DataTable dt = new DataTable();
    protected void Page_Load(object sender, EventArgs e)
    {
        dt.Columns.Add("Name", typeof(string));
        dt.Rows.Add(TextBox1.Text);
        ViewState["DataTable"] = dt;

    }
    protected void btnSumbit_Click(object sender, EventArgs e)
    {
        if (TextBox1.Text == " ")
        {
            return;
        }
        else if (TextBox1.Text != string.Empty)
        {
            aspGrid1.DataSource = (DataTable)ViewState["DataTable"];
            aspGrid1.DataBind();
        }
    }
}
4

3 に答える 3

0
using System;
using System.Web.UI;
using System.Data;


public partial class Default6 : System.Web.UI.Page
{
    DataTable _dt;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            _dt = new DataTable();
            _dt = CreateDataTable();
            Session["DataTable"] = _dt;
            aspGrid1.DataSource = ((DataTable)Session["DataTable"]).DefaultView;
            aspGrid1.DataBind();
        }

    }
    protected void btnSumbit_Click(object sender, EventArgs e)
    {
        if (TextBox1.Text == " ")
        {
            return;
        }
        else if (TextBox1.Text != string.Empty)
        {

            AddDataTable(TextBox1.Text, (DataTable)Session["DataTable"]);
            aspGrid1.DataSource = ((DataTable)Session["DataTable"]).DefaultView;
            aspGrid1.DataBind();
        }

    }

    private DataTable CreateDataTable()
    {
        DataTable datatable=new DataTable();

        DataColumn datacolumn=new DataColumn();
        datacolumn.ColumnName = "Name";
        datacolumn.DataType = Type.GetType("System.String");
        datatable.Columns.Add(datacolumn);
        return datatable;
    }
    private void AddDataTable(string name,DataTable datatable)
    {

        DataRow dataRow;
        dataRow = datatable.NewRow();
        dataRow["Name"] = name;
        datatable.Rows.Add(dataRow);
    }
}
于 2013-05-11T10:54:11.627 に答える
0

Page_Load を入力するたびに、データ テーブルを作成しています。

ViewState にデータ テーブルがまだないかどうかを確認する必要があります。ある場合は、データ テーブルを取り出して新しい行を追加するか、データ テーブルを初めて作成します。

最善の方法は、Page_Load で初めてデータ テーブルを初期化し、if(!PostBack){...}それをセッションに格納することです (ViewState に似ていますが、クライアントとの間の PostBack データを減らします)。

次に、ポストバックの場合は、セッションからデータ テーブルを取得し、新しい行を追加します。

于 2013-05-11T12:09:31.473 に答える
0

何らかの方法でデータを永続化する必要があります。

標準オプションには、データベース、セッション状態に格納された変数、またはページ内の非表示フィールドが含まれます。.net コントロールは、それ自体にデータバインドするつもりはありませんviewstate

非標準のオプションは、ポストバックなしですべてのクライアント側を処理することです。このルートに進むと、より適切なサービスが提供されますが、標準の .net コントロールを使用するのではなく、ストレート html を使用します。これにはかなりのコーディングが必要です。

于 2013-05-08T16:32:31.180 に答える