【发布时间】:2011-06-17 12:16:25
【问题描述】:
我有一个 Gridview,必须在 Pager 行的运行时为其添加下拉列表。我在 Gridview RowCreated 上添加了以下代码。
protected void gv_transaction_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Pager)
{
using (DropDownList ddlpagesize = new DropDownList())
{
ddlpagesize.Items.Add("25");
ddlpagesize.Items.Add("50");
ddlpagesize.Items.Add("75");
ddlpagesize.Items.Add("100");
ddlpagesize.Items.Add("150");
ddlpagesize.Items.Add("200");
ddlpagesize.AutoPostBack = true;
ddlpagesize.Items.FindByText(gv_transaction.PageSize.ToString()).Selected = true;
ddlpagesize.SelectedIndexChanged += ddlpagesize_SelectedIndexChanged;
using (Table tbl = (Table)e.Row.Cells[0].Controls[0])
{
using (TableCell cell = new TableCell())
{
cell.Controls.Add(new LiteralControl("<b>Page Size: </b>"));
cell.Controls.Add(ddlpagesize);
tbl.Rows[0].Cells.AddAt(0, cell);
}
}
}
}
}
protected void ddlpagesize_SelectedIndexChanged(object sender, EventArgs e)
{
using (DropDownList ddlpagesize = (DropDownList)sender)
{
gv_transaction.PageSize = int.Parse(ddlpagesize.SelectedValue);
gv_transaction.PageIndex = 0;
BindTransactionGrid();
}
}
现在,当我更改下拉列表值时,未触发 SelectedIndex 更改事件。 但有趣的是,当我从页面大小下拉列表的启动中删除 using 语句时; Selectedindex 事件正在完美触发。请告诉我是否与 Gridview 中动态下拉列表的 dropdownlist 和 selectedIndex Changed 事件的处置有任何关系
【问题讨论】:
-
为什么要处理刚刚创建的唯一DropDownList,为什么你认为这不会有副作用?您在对象被持久化到 ViewState 之前就对其进行了处理,因此它不会在回发时引发任何事件。
-
作为一个良好的编程习惯,我们必须处理动态创建的控件。不是吗?
-
ASP.NET-Controls 在Page-Lifecycle 的末尾自动释放,因此您不应该手动释放它们。实际上整个页面会在 HTML 渲染好后发送给客户端(HTTP 是无状态的)。
标签: c# asp.net gridview drop-down-menu using-statement