-->

经典ASP.NET删除事件不会在动态生成的DataGrid控件中删除链接调用(Classic ASP

2019-09-29 15:11发布

我有一个经典的asp.net应用程序。 我与标记数据源作为一个数据网格用户控制:

<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>

删除LinkBut​​ton的模板被声明为:

<asp:TemplateField HeaderText="" SortExpression="" Visible="True"> 
    <ItemTemplate>
       <asp:LinkButton ID="btnDelete" CommandName="Delete" runat="server" Text="Delete" />
    </ItemTemplate>            
</asp:TemplateField>

后面的类名的代码是“类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" />

我还需要创建根据情况动态代码背后的多个用户控件。 所以,我有标记页面的占位符:

  <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”未击中的项目不能被删除。

在静态标记用户控件的删除链接的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>

任何人都知道这里有什么问题? 我们如何确定数据网格中删除模式下使用这种方式在后面的代码删除LinkBut​​ton的时候?

谢谢

更新:用户控制被动态地从产生 -

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);
}

Answer 1:

发现出了问题。 数据后绑定

   ucLControl = LoadControl("Controls/LSystemGrid.ascx")       as StudLSystemGrid;

调用ucLControl.DataBind(); 又抹了有限的属性。

删除行“ucLControl.DataBind();”之后,删除事件可以触发。



文章来源: Classic ASP.NET Delete event is not invoked in dynamically generated datagrid control delete link