[英]Dynamically add rows to DataTable
我有一個帶文本框和按鈕的asp.net表單。 每次單擊按鈕時,我需要將文本框中的文本添加為表中的新行,然后將其顯示在gridview中。
我設法將文本框中的文本添加為新行,但是每次單擊按鈕時,似乎表都沒有保存(意思是-我只剩下一行)。
public partial class buildTable : System.Web.UI.Page
{
DataTable dt = new DataTable();
public int namesCounter;
protected void Page_Load(object sender, EventArgs e)
{
dt.Columns.Add("ID", typeof(Int16));
dt.Columns.Add("name", typeof(string));
namesCounter = 0;
names_GV.DataSource = dt;
}
protected void addName_Click(object sender, EventArgs e)
{
namesCounter += 1;
DataRow dtrow = dt.NewRow();
dtrow["ID"] = namesCounter;
dtrow["name"] = newName_TXT.Text;
dt.Rows.Add(dtrow);
names_GV.DataBind();
}
}
我猜想這與回發有關...
這里的問題在於asp.net的“無狀態”。 簡而言之,每次到頁面的往返(第一次訪問,回發)都會創建一個buildTable
的新實例,從而重新實例化dt
變量並將其設置為網格的數據源。
考慮將用戶輸入發送到某種持久層,該持久層使您可以按用戶保留數據,並在每次回發時重新綁定所述數據。 這里可以使用的策略實際上取決於應用程序的大小和上下文。
請參閱:
您需要將ID和表添加到Viewstate,以便保留State,因為這里我們沒有將數據保存在數據庫中。 因此,每次頁面加載時,除非我們將其保存在viewstate中,否則Data為Null。
檢查以下代碼:-它將完美運行:-
DataTable dt = new DataTable();
public int namesCounter;
protected void Page_Load(object sender, EventArgs e)
{
dt.Columns.Add("ID", typeof(Int32));
dt.Columns.Add("name", typeof(string));
//namesCounter = 0;
if (!IsPostBack)
{
ViewState["Number"] = 0;
ViewState["table"] = dt;
}
names_GV.DataSource = dt;
names_GV.DataBind();
}
protected void addName_Click(object sender, EventArgs e)
{
dt = (DataTable)ViewState["table"];
namesCounter = Convert.ToInt32(ViewState["Number"]) + 1;
ViewState["Number"] = namesCounter;
DataRow dtrow = dt.NewRow();
dtrow[0] = namesCounter;
// dtrow["ID"] = namesCounter;
dtrow["name"] = newName_TXT.Text;
dt.Rows.Add(dtrow);
ViewState["table"] = dt;
names_GV.DataSource = dt;
names_GV.DataBind();
}
這段代碼與我一起正常工作,將它們添加到按鈕單擊事件中:
DataTable dt_items = new DataTable();
dt_items.Columns.Add("Item");
dt_items.Columns.Add("Quantity");
if (grid_items.Rows.Count > 0)
{
foreach (GridViewRow row in grid_items.Rows)
{
dt_items.Rows.Add(row.Cells[0].Text,row.Cells[1].Text);
}
}
dt_items.Rows.Add(ddl_item.SelectedItem.Text, txt_itemAmount.Text);
grid_items.DataSource = dt_items;
grid_items.DataBind();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.