【问题标题】:Sortable DataGrid inside User Control用户控件内的可排序 DataGrid
【发布时间】:2014-05-29 21:11:38
【问题描述】:

我需要在用户控件中实现可排序的 DataGrid。

我的主页代码如下:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    myPlaceHolder.Controls.Add(page.LoadControl("~/myControl.ascx") as MyCtrl);
}

用户控件如下所示:

<asp:DataGrid ID="myGrid" runat="server" Width="100%" AutoGenerateColumns="False"
    AllowSorting="True" OnSortCommand="Grid_Sort" EnableViewState="true" >
        <Columns>
            <asp:BoundColumn DataField="Clmn1" SortExpression="" HeaderText="" />
            <asp:BoundColumn DataField="Clmn2" SortExpression="Clmn2" HeaderText="Clmn2header" />
        </Columns>
    </asp:DataGrid>

所以我遇到了以下问题:当我单击自动生成的链接按钮 Clmn2header 对数据进行排序时,它会导致主页重新加载(而不是回发)并因此创建新的用户控件。所以回发永远不会发生,排序方法 Grid_Sort 永远不会触发。

我确定 ViewState 已启用。

请帮帮我。我做错了什么? 谢谢。

编辑

我只是简化一下,实际上,用户控件初始化看起来像这样:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    myPlaceHolder.Controls.Add(MyCtrl.createInstance(/*some params*/));
}

和crete实例方法:

public static MyCtrl createInstance(/*some params*/)
{
    MyCtrl ctrl = page.LoadControl("~/myControl.ascx") as MyCtrl;
    ctrl._init(/*some params*/);
    return ctrl;
}

private void _init(/*some params*/)
{
    /*setting controls properties with params*/
}

【问题讨论】:

  • 仍然没有解决问题。帮助,任何人!

标签: c# asp.net sorting datagrid user-controls


【解决方案1】:

什么是 MyCtrl ?为什么在使用 loadcontrol 方法时进行强制转换?下面的行应该足以实例化您的控件,

myPlaceHolder.Controls.Add(page.LoadControl("~/myControl.ascx"));

您是否将 IsPostBack() 检查点放在页面和控件的 page_load 事件中,我很确定当您单击列标题文本链接时,不应该有整页回发。

if (!IsPostBack) { }

如果您的排序命令事件仍未命中,请告诉我。

【讨论】:

  • 我添加了完整的用户控制初始化代码。我试过放置 IsPostBack 检查点,但 IsPostBack 总是错误的。
猜你喜欢
  • 1970-01-01
  • 2013-01-15
  • 2014-07-21
  • 2012-08-14
  • 2010-09-10
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多