как показать список родительской компании и дочерних компаний с флажком для выбора в веб-форме asp.net, используя вложенные повторители - PullRequest
0 голосов
/ 17 января 2019

Таблица компаний в SQL-сервере с использованием веб-форм asp.net для отображения всего списка компаний, в первую очередь с материнской компанией и дочерних компаний под родительской компанией, со списком флажков для выбора компаний.В 1-ом SQL SP я получаю список родительских компаний в Datatable и идентификаторы этой компании из первой таблицы данных (например, 1,2,3), чтобы перейти к циклу, чтобы получить список дочерних компаний во второй DataTable

Я пытался использовать вложенные повторители для 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 Datatable, s с вложенными повторителями, чтобы получить ожидаемый результат,Любая помощь будет отличной

Ожидаемый ВЫХОД

      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

1 Ответ

0 голосов
/ 17 января 2019

Когда вы используете Repeater, убедитесь, что весь ваш контент находится внутри узла шаблона, например, <ItemTemplate> - даже вложенный Repeater.

Как только разметка верна, вы можете прикрепить событие OnItemDataBound к родительскому повторителю, затем использовать идентификатор этого элемента, чтобы получить данные для привязки к вложенному повторителю, а затем просто связать его. Вот так например:

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

Что-то в этом роде

...