【问题标题】:Using Nested Repeaters With Stored Procedures使用带有存储过程的嵌套中继器
【发布时间】:2010-11-03 11:35:44
【问题描述】:

嘿,我想在 ASP.NET 2 中使用嵌套存储过程。

第一个存储过程返回所有营销活动,第二个存储过程返回营销活动中的所有项目。

我已经设置了 2 个中继器,现在我正尝试将参数从父中继器传递到子中继器存储过程,即活动 ID....这很棘手

后面的代码我想试试

public void Repeater1_ItemDataBound(Object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
    ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.EditItem)
    {
        SqlDataSource2.SelectParameters["campaignId"].DefaultValue =
            DataBinder.Eval(e.Item.DataItem, "campaignId").ToString();
    }

}

但是我不知道如何调用这个方法或者如果我尝试这个来加载它

<asp:Repeater ID="Repeater1" runat="server"  DataSourceID="SqlDataSource1" OnDataBinding="Repeater1_ItemDataBound">

我得到了错误

CS0123:“Repeater1_ItemDataBound”没有重载匹配委托“System.EventHandler”

任何帮助将不胜感激

编辑:将我的代码更改为

public void Repeater1_ItemDataBound(Object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
    ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.EditItem)
    {
        Response.Write(DataBinder.Eval(e.Item.DataItem, "campaignId").ToString());
        SqlDataSource2.SelectParameters["campaignId"].DefaultValue =
            DataBinder.Eval(e.Item.DataItem, "campaignId").ToString();
        SqlDataSource2.SelectParameters["statusId"].DefaultValue =
            "1";

    }

    foreach (RepeaterItem repeaterItem in Repeater1.Items)
    {
        ((Repeater)(repeaterItem.FindControl("Repeater2"))).DataBind();

    }

}

但是将正确的活动 id 传递给存储过程并不令人高兴,但这并没有在前端正确显示

有什么想法吗?

【问题讨论】:

    标签: asp.net repeater


    【解决方案1】:

    您应该附加ItemDataBound 事件,而不是尝试附加DataBinding 事件:

    <asp:Repeater ID="Repeater1" runat="server" 
            DataSourceID="SqlDataSource1" OnItemDataBound="Repeater1_ItemDataBound">
    

    DataBinding 事件适用于整个中继器,ItemDataBound 将触发每个项目。

    【讨论】:

    • 这修复了错误好吧,不高兴..它似乎没有正确绑定数据。
    • @StevieB - 由于您的事件处理程序没有将任何数据绑定到嵌套中继器,我并不感到惊讶。
    • @Oded 好的,我尝试了 SqlDataSource2.SelectParameters["campaignId"].DefaultValue = DataBinder.Eval(e.Item.DataItem, "campaignId").ToString();中继器 s = (Repeater)e.Item.FindControl("Repeater2"); s.DataBind();
    • @StevieB - 但是你在哪里 databinding 嵌套转发器?我没有看到您获得对它的引用或对其进行绑定。
    • @Oded Repeater 2 是嵌套的中继器,你可以在上面看到我是 OnItemDataBound 事件中的数据绑定
    【解决方案2】:

    Microsoft 发布了使用嵌套中继器控件显示分层数据的分步指南:Display Hierarchical Data

    请记住,可以从存储过程(以两个 SELECT 结束的存储过程)返回两个数据集

    这是一个使用 EnterpriseLibrary 的示例

        Try
            Using cmd As DbCommand = db.GetStoredProcCommand("spYourStoreProcedure")
                db.AddInParameter(cmd, "@customer", DbType.Int32, nCustomer)
                Using ds = db.ExecuteDataSet(cmd)
                    ds.Tables(0).TableName = "Parent"
                    ds.Tables(1).TableName = "Child"
                    ds.Relations.Add("MyRelation", ds.Tables("Parent").Columns("customer"), ds.Tables("Child").Columns("customer"))
    
                    ParentRepeater.DataSource = ds.Tables("Parent")
                    ParentRepeater.DataBind()
                End Using
            End Using
        Catch ex As Exception
            ' Manage your excepion
            Exit Sub
        End Try
    

    这是一个简单的嵌套中继器:

        <asp:Repeater ID="ParentRepeater" runat="server">
        <HeaderTemplate>
            <ul>
        </HeaderTemplate>
        <ItemTemplate>
            <li>
                <b><%# Container.DataItem("customer_name")%></b>
                <asp:Repeater ID="repFuncionesXArea" runat="server" DataSource='<%# Container.DataItem.Row.GetChildRows("MyRelation") %>' >
                    <HeaderTemplate>
                       <ul>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <li><%# Container.DataItem("customer_history")%></li>
                    </ItemTemplate>
                    <FooterTemplate>
                        </ul>
                    </FooterTemplate>
                </asp:Repeater>
            </li>
        </ItemTemplate>
        <FooterTemplate>
            </ul>
        </FooterTemplate>
    </asp:Repeater>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多