如何使用嵌套转发器在 Web 表单中选择复选框显示母公司和子公司 asp.net 子公司列表.SQL Server 中的


公司

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

我尝试将嵌套中继器用于 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

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

标记正确后,可以将OnItemDataBound事件附加到父转发器,然后使用该项的 ID 获取数据以绑定嵌套转发器,然后仅绑定它。例如,像这样:

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

类似的东西

最新更新