1

SQL server 中的公司表使用 asp.net web 表单显示所有公司列表,首先是母公司和母公司下的子公司,并带有一个复选框列表来选择公司。在第一个 SQL SP 中,我从第一个数据表(例如:1、2、3)中获取了一个数据表中的母公司列表和该公司 ID,以循环获取第二个数据表中的子公司列表

我曾尝试对 2 个数据表使用嵌套中继器,但不确定如何实现这一点以及哪个是最好的控制

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            DataTable dtx = Getparentfirm();
            DataTable dso = GetSuboffice(dtx);
            R1.DataSource = dtx;
            R1.DataBind();
            R2.DataSource = dso;
            R2.DataBind();
        }

    }

    private DataTable Getparentfirm()
    {
        using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True"))
        {
            SqlDataAdapter sda = new SqlDataAdapter("select * from company where parentcompany is NULL", conn);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            return dt;
        }

    }
    private DataTable GetSuboffice(DataTable dt)
    {
        DataTable dtz = new DataTable();
        using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True"))
            foreach (DataRow row in dt.Rows)
            {                           
            SqlDataAdapter sda = new SqlDataAdapter("select  id, fname , lname from customer where cid =" + row["cid"].ToString(), conn);                           
            sda.Fill(dtz);
            return dtz;
        }
        return null;
    }

       <asp:Repeater ID="R1" runat="server">
            <ItemTemplate>
                    name:<%# Eval("companyname") %></td>
            </ItemTemplate>
            <asp:Repeater ID="R2" runat="server">
                    <ItemTemplate>
                        ID :<%# Eval("companyid") %>
                        Name:<%# Eval("companyname") %>

                </ItemTemplate>
            </asp:Repeater>
        </asp:Repeater>

如何将 2 个数据表绑定到嵌套中继器以获得预期的输出。任何帮助都会很棒

预期输出

      parentcompanyid 1     parent company one          checkbox
        sub office 1.1        sub office one            checkbox
        sub office 1.2        sub office two            checkbox
      parent comapnyid 2    parent company two          checkbox 
         sub office 2.1        sub office one           checkbox
        sub office 2.2        sub office two            checkbox
4

1 回答 1

0

当您使用中继器时,请确保您的所有内容都在模板节点中,例如<ItemTemplate>- 甚至是嵌套的中继器。

一旦标记正确,您可以将OnItemDataBound事件附加到父Repeater,然后使用该项目的ID获取数据来绑定嵌套的Repeater,然后绑定它。像这样的例子:

ASPX

        <asp:Repeater ID="R1" runat="server" OnItemDataBound="R1_ItemDataBound">
            <ItemTemplate>
                  <asp:HiddenField runat="server" ID="CompanyId" value='<%# Eval("id") %>' />
                  <div>name:<%# Eval("companyname") %></div>

                  <asp:Repeater ID="R2" runat="server">
                    <ItemTemplate>
                        ID :<%# Eval("companyid") %><br>
                        Name:<%# Eval("companyname") %>
                    </ItemTemplate>
                  </asp:Repeater>
            </ItemTemplate>                
        </asp:Repeater>

CS

    protected void Page_Load(object sender, EventArgs e)
    {   
        if (!Page.IsPostBack)
        {
            DataTable dtx = Getparentfirm();
            R1.DataSource = dtx;
            R1.DataBind();
        }  
    }    

    protected void R1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
          // Get companyId from hidden field 
          // or you could get it from e.Item.DataItem which should have the data for this row of data
          var CompanyID = (HiddenField)e.Item.FindControl("CompanyId");
          var id = Convert.ToInt32(CompanyID.Value);

          var R2 = (Repeater)e.Item.FindControl("R2");
          var dso = GetData(id); // Get sub companies based on this company id

          R2.DataSource = dso;
          R2.DataBind();
       }  

类似的东西

于 2019-01-17T01:28:40.177 回答