2011-07-30 42 views
1

我目前手動將數據添加到數據表,然後將數據表綁定到一次一行的gridview一行。但是,嘗試添加新行時每次回發都會覆蓋原始行,因爲每次都會創建並綁定新的數據表。Datatable - > Gridview在添加行時通過回發持久

如何保存視圖狀態下的數據表,並添加到它,綁定,然後再保留,以便我可以不斷添加行到gridview?我根本不熟悉視角國;我只知道,這是我想要從網上搜索。

<asp:DropDownList ID="DDLFirstColumn" runat="server" Style="z-index: 1; left: 11px; 
    top: 171px; position: absolute; height: 16px; width: 104px"> 
    <asp:ListItem>Selection 1</asp:ListItem> 
    <asp:ListItem>Selection 2</asp:ListItem> 
    <asp:ListItem>Selection 3</asp:ListItem> 
</asp:DropDownList> 
<asp:TextBox ID="txtSecondColumn" runat="server" style="z-index: 1; left: 127px; top: 169px; position: absolute; height: 22px; width: 56px"></asp:TextBox> 
<asp:DropDownList ID="DDLThirdColumn" runat="server" Style="z-index: 1; left: 200px; top: 171px; 
    position: absolute"> 
    <asp:ListItem>Selection 1</asp:ListItem> 
    <asp:ListItem>Selection 2</asp:ListItem> 
    <asp:ListItem>Selection 3</asp:ListItem> 
</asp:DropDownList> 
<asp:Button ID="btn_Add" runat="server" Style="z-index: 1; left: 345px; top: 167px; 
    position: absolute" Text="Add" OnClick="btn_Add_Click" /> 
<asp:GridView ID="GridView1" runat="server" Style="z-index: 1; left: 14px; top: 219px; 
    position: absolute; width: 400px"> 
</asp:GridView> 

using System; 
using System.Data; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void btn_Add_Click(object sender, EventArgs e) 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("Column 1", Type.GetType("System.String")); 
     dt.Columns.Add("Column 2", Type.GetType("System.String")); 
     dt.Columns.Add("Column 3", Type.GetType("System.String")); 

     dt.Columns[0].DefaultValue = DDLFirstColumn.SelectedValue; 
     dt.Columns[1].DefaultValue = txtSecondColumn.Text; 
     dt.Columns[2].DefaultValue = DDLThirdColumn.SelectedValue; 

     dt.Rows.Add(); 

     GridView1.DataSource = dt; 

     GridView1.DataBind(); 

    } 
} 

回答

0

您可以在ViewState中的數據表存儲,如:

ViewState["dt"] = dt; // Store it in viewstate 

然後你就可以從視圖狀態如下訪問:

DataTable dt = (DataTable)ViewState["dt"]; // Retrieving from ViewState 

protected void btn_Add_Click(object sender, EventArgs e) 
{ 
DataTable dt = new DataTable(); 
.............. 

dt.Rows.Add(); 

ViewState["dt"] = dt; // storing datatable in ViewState 

GridView1.DataSource = dt; 
GridView1.DataBind(); 
} 
} 
+0

我想你給的例子,但是我做不到讓它工作。我可能錯過了一些簡單的東西,但我嘗試了多種安排,但仍然沒有。然而,我確實在http://www.dotnetobject.com/showthread.php?tid=1286 找到了一個工作解決方案感謝您的幫助。 – kmc5117

+0

你問過的問題,如何從ViewState存儲和檢索。你錯過的是,當你試圖第二次增加值時,你必須從ViewState中獲取值,而不是從新的數據表中獲取值。 –