【问题标题】:No backend database, only dynamically created table bound to GridView没有后端数据库,只有动态创建的绑定到 GridView 的表
【发布时间】:2013-05-08 14:27:01
【问题描述】:

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

例如:--

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

【问题讨论】:

  • 这段代码有什么问题
  • 为什么不使用会话来存储数据。
  • 您可以在 Session 或 ViewState 中放置一个变量(例如:LIST),然后绑定到它。

标签: c# asp.net


【解决方案1】:

您必须以某种方式持久化数据。

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

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

【讨论】:

    【解决方案2】:
    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);
        }
    }
    

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多