【问题标题】:Dynamically adding Page size dropdown list in the Gridview Pager在 Gridview Pager 中动态添加页面大小下拉列表
【发布时间】: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


【解决方案1】:

你不需要在 using 语句中包装 asp.net 控件,asp.net 会在你的控件上自动调用 dispose,我认为你的 using 语句导致它们被过早地释放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2017-06-30
    相关资源
    最近更新 更多