在我的网页上,我有日历,表格和按钮。
选择日期后,将触发表的databind()方法。有一个autopostback = true的复选框。检查后,表格消失。我不知道如何在回发后使用选中的复选框保留表格。
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString.Get("Id") != null)
{
if (!IsPostBack)
{
Calendar1.Visible = false;
}
}
}
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
Label1.Text = Calendar1.SelectedDate.ToShortDateString();
//Set datasource = (cal.selectedDate), the invoking override
// DataBind() method to create table
}
Calendar1.Visible = false;
}
我已尝试再次对数据表进行数据绑定(IsPostBack),但我无法实现目标,相反,它在现有表格上创建了另一个表格
这是使用复选框创建表的方法
public override void DataBind()
{
TableRow myTableRow = default(TableRow);
TableCell myTableCell = default(TableCell);
if (source != null && !(mDate == DateTime.MinValue))
{
for (int i = 0; i <= 23; i++)
{
foreach (DataRow row in source.Tables["Object"].Rows)
{
myTableCell = new TableCell();
CheckBox cb = new CheckBox();
cb.AutoPostBack = true;
cb.Attributes.Add("id", row["objid"].ToString());
cb.InputAttributes.Add("rowID", mDate.Date.AddHours(i).ToString());
myTableCell.Controls.Add(cb);
myTableCell.HorizontalAlign = HorizontalAlign.Center;
myTableRow.Cells.Add(myTableCell);
TimeSheetTable.Rows.Add(myTableRow);
}
}
}
else
{
throw new ArgumentException(" Invalid Date.");
}
}
答案 0 :(得分:1)
每次回发都需要重新生成动态生成的表。对于后续回发,将重新加载viewstate,但您必须以相同的方式重新创建表,单元格和控件,否则Web表单会抱怨它。你需要在Init期间这样做我相信;如果复选框选中状态已更改,则Web表单框架将在加载后更新Checked属性,以便进行处理。
我通常使用转发器或listview控件,因为动态控件可能很痛苦,而且ListView非常灵活。数据绑定负责为您重建控制树。