簡體   English   中英

沒有后端數據庫,只有動態創建的表綁定到GridView

[英]No backend database, only dynamically created table bound to GridView

我需要這樣的解決方案:沒有后端數據庫,沒有Xml,沒有Excel,僅當用戶在GridData中提供信息顯示時。 僅在.aspx.cs表和列中動態創建...

例如: -

Name |-Text box-| Button

網格視圖

當用戶使用TextBox和Submit Button訪問上述名稱的頁面時。

當用戶在TextBox中輸入名稱並單擊Submit時,我想將該名稱添加到網格中,但是在這里,我不僅要顯示數據...而且還要在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();
        }
    }
}

您必須以某種方式保留數據。

標准選項包括數據庫,存儲在會話狀態或頁面內隱藏字段中的變量。 .net控件不會將數據綁定到它自己的viewstate

一個非標准的選擇是處理客戶端的所有內容而無需回發。 如果您采用這種方式,則可以更好地為您服務,但最好不要使用標准的.net控件,而應使用純HTML。 這將需要相當多的編碼。

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

每次輸入Page_Load時都在創建數據表。

您需要檢查ViewState中是否還沒有數據表,如果有,請拉出數據表並添加新行,或者首次創建數據表。

最好的方法是第一次在Page_Load的if(!PostBack){...}中初始化數據表並將其存儲在Session中(類似於ViewState,但是減少了往返於客戶端的PostBack數據)。

然后,如果是回發,只需從會話中獲取數據表並向其中添加新行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM