我需要在User Control中实现可排序的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*/));
}
克里特实例方法:
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*/
}
答案 0 :(得分:0)
什么是MyCtrl?为什么使用loadcontrol方法进行转换?下面的行应该足以实例化你的控件,
myPlaceHolder.Controls.Add(page.LoadControl("~/myControl.ascx"));
您是否在页面的page_load事件中添加了IsPostBack()检查点&amp;控制,我很确定当你点击列headertext链接时,不应该有整页回发。
if (!IsPostBack) { }
如果你的排序命令事件没有被击中,请告诉我。