我有一个经典的asp.net应用程序。我有一个DataGrid用户控件,其MarkUp数据源为:
<asp:SqlDataSource ID="DataSource" runat="server" DeleteCommand="UPDATE tblLSystem SET LS_Deleted='1' WHERE LS_ID=@LS_ID"
SelectCommand="SELECT * FROM vwLSystem WHERE LS_Deleted='0' order by LS_CreatedOn" OnSelected="DataSource_Selected" OnDeleted="DataSource_Selected" OnDeleting = "DataSource_Deleting">
<DeleteParameters>
<asp:Parameter Name="LS_ID" Type="Object" />
</DeleteParameters>
</asp:SqlDataSource>
删除链接按钮模板声明为:
<asp:TemplateField HeaderText="" SortExpression="" Visible="True">
<ItemTemplate>
<asp:LinkButton ID="btnDelete" CommandName="Delete" runat="server" Text="Delete" />
</ItemTemplate>
</asp:TemplateField>
类名后面的代码是“ class StudLSystemGrid”。并且此类中的DataSource_Deleting事件函数是:
protected void DataSource_Deleting(object sender, SqlDataSourceCommandEventArgs e)
{
}
此用户控件在另一个asp.net页中使用。它在页面中注册为:
<%@ Register Src="Controls/LSystemGrid.ascx" TagName="LSystemGrid" TagPrefix="uc4" %>
在同一页面中,它用于静态创建一个用户控件,如下所示:
<uc4:LSystemGrid ID="LSystemGrid1" runat="server" ShowAuditFields="false" />
我还需要根据后面的代码中的情况动态创建多个用户控件。所以我在MarkUp页面中有一个占位符:
<asp:PlaceHolder id="PlaceHolder1" runat="server"/>
并在代码后面的相同代码中生成用户控件:
ucLControl =
LoadControl("Controls/LSystemGrid.ascx")
as StudLSystemGrid;
ucLControl.ID = "LSystemGridPD" + i.ToString();
ucLControl.ShowAuditFields = false;
ucLControl.SqlDataSource.ConnectionString = ConnectionManager.ConnectionString;
ucLControl.DataBind();
PlaceHolder1.Controls.Add(ucLControl);
静态生成的用户控件工作正常。单击删除链接可以调用前面提到的函数“ DataSource_Deleting”。但是,动态生成的用户控件不起作用。函数“ DataSource_Deleting”未命中,并且该项目无法删除。
静态标记用户控件中的delete链接的html源是:
<a onclick="{alert('There'); return false;} ;"
id="ctl00_PageBody_LSystemGrid1_BaseGrid_ctl02_btnDelete"
href="javascript:__doPostBack('ctl00$PageBody$LSystemGrid1$BaseGrid$ctl02$btnDelete','')">Delete</a>
对于动态生成的用户控件,其背后的代码是:
<a onclick="{alert('Here'); return false;} ;"
id="LSystemGridPD0_BaseGrid_ctl13_btnDelete"
href="javascript:__doPostBack('LSystemGridPD0$BaseGrid$ctl13$btnDelete','')">Delete</a>
有人知道这是怎么回事吗?在后面的代码中以这种方式使用delete linkbutton时,如何确定datagrid处于删除模式?
谢谢
更新:用户控件是通过-动态生成的
protected void Page_Load(object sender, EventArgs e)
{
PreRender += LSystem_PreRender;
}
void LSystem_PreRender(object sender, EventArgs e)
{
ucLControl =
LoadControl("Controls/LSystemGrid.ascx")
as StudLSystemGrid;
ucLControl.ID = "LSystemGridPD0";
ucLControl.ShowAuditFields = false;
ucLControl.SqlDataSource.ConnectionString = ConnectionManager.ConnectionString;
ucLControl.DataBind();
PlaceHolder1.Controls.Add(ucLControl);
}
更新2:
更新2:用户控件是通过-动态生成的
protected void Page_Load(object sender, EventArgs e)
{
ucLControl =
LoadControl("Controls/LSystemGrid.ascx")
as StudLSystemGrid;
ucLControl.ID = "LSystemGridPD0";
ucLControl.ShowAuditFields = false;
ucLControl.SqlDataSource.ConnectionString = ConnectionManager.ConnectionString;
ucLControl.EnableViewState = true;
ucLControl.DataBind();
PlaceHolder1.Controls.Add(ucLControl);
}
找出问题所在。数据绑定后
ucLControl = LoadControl("Controls/LSystemGrid.ascx") as StudLSystemGrid;
调用ucLControl.DataBind(); 再次擦除边界属性。
删除“ ucLControl.DataBind();”行后,可以触发删除事件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句