我有一个数据输入表,每行有一个AJAX ComboBox和一个HTML文本输入。我无法通过Javascript动态添加ComboBoxes行,所以我创建了一个“添加行”按钮。在最初添加行以填充数据时,按钮触发事件会删除这些行,因此表只有新行。这两种方法都使用Table.Rows.Add(row),并且通过相同的方法为初始和按钮触发的行添加生成行。
这是我生成行的代码:
protected System.Web.UI.HtmlControls.HtmlTableRow getEmptyRow(int rowNum, bool script)
{
HtmlTableRow row = new HtmlTableRow();
HtmlTableCell a = new HtmlTableCell();
a.Style.Add("width", "75%");
var chgsarray = d.WaterRates.Select(q => q.Name)
.Where(q => !q.Contains("test"))
.OrderBy(q => q);
AjaxControlToolkit.ComboBox t = new AjaxControlToolkit.ComboBox() { ID = "chrgName" + rowNum, AutoPostBack = false, DataSource = chgsarray, AutoCompleteMode = AjaxControlToolkit.ComboBoxAutoCompleteMode.SuggestAppend, ItemInsertLocation = AjaxControlToolkit.ComboBoxItemInsertLocation.Append, DropDownStyle = AjaxControlToolkit.ComboBoxStyle.DropDown };
t.DataBind();
t.Text = "";
a.Controls.Add(t);
row.Cells.Add(a);
a = new HtmlTableCell();
a.Style.Add("width", "25%");
a.InnerText = "$";
HtmlInputText tc = new HtmlInputText() { ID = "chrgChrg" + rowNum, Name = "chrgChrg" + rowNum, ViewStateMode = ViewStateMode.Disabled, ClientIDMode = ClientIDMode.Static };
tc.Style.Add("width", "182px");
a.Controls.Add(tc);
row.Cells.Add(a);
return row;
}
按下按钮时添加行的代码非常简单:
protected void Add_Row(Object sender, EventArgs e)
{
int k = -1;
for (int i = 0; Request.Form.AllKeys.Contains("ctl00$MainContent$chrgChrg" + i); i++)
k++;
ChargesTable.Rows.Add(getEmptyRow(k+1, true));
}
那么在添加新行时如何保留现有行呢?
答案 0 :(得分:3)
请记住,网络是无国籍的。
除非另有说明。
您无法在回发中保留表行。原始<asp:Table>
将在每次回发时恢复。
您必须在会话状态中保留行的数据列表,然后在每个回发上重新创建所有行,然后在按钮单击上添加行。
更好的是,使用GridView
并将其绑定到会话状态中的数据。