没有后端数据库,只能动态创建绑定到GridView的表

时间:2013-05-08 14:27:01

标签: c# asp.net

我需要这样的解决方案:没有后端数据库,没有Xml,没有Excel,只有当用户在GridData中显示信息时。仅在.aspx.cs表格和列中动态创建...

例如: -

Name |-Text box-| Button

的GridView

当用户使用TextBox和Submit Button访问上面的页面时..

当用户在TextBox中输入名称并点击提交时,我想将该名称添加到网格中,但在这里我不仅要显示数据...还要在Gridview中输入数据。

EG2: -

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

我希望显示用户输入的多少值,我希望在gridview中显示多少值,如此

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

3 个答案:

答案 0 :(得分:0)

你必须以某种方式持久保存数据。

标准选项包括数据库,存储在会话状态或页内隐藏字段中的变量。 .net控件不会将数据绑定到它自己的viewstate

非标准选项是在没有回发的情况下处理所有客户端。如果你走这条路线你会得到更好的服务但不使用标准的.net控件,而是使用直接的HTML。这将需要相当多的编码。

答案 1 :(得分: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);
    }
}

答案 2 :(得分:0)

每次输入Page_Load时都会创建数据表。

您需要检查ViewState中是否还没有数据表,如果这样做 - 将其拉出并添加新行,或者首次创建数据表。

最好的方法是首次在Page_Load中的if(!PostBack){...}初始化数据表并将其存储在Session中(类似于ViewState,但会将PostBack数据从/返回到客户端)。

然后,如果它是回发,只需从会话中获取数据表并将新行添加到其中。