отображение родительских / дочерних записей в asp.net gridview

#asp.net #sql #gridview #parent-child

#asp.net #sql #просмотр сетки #родитель-потомок

Вопрос:

Хорошо, кажется, я не могу разобраться в этом..У меня есть 1 таблица, в которой есть идентификатор столбца, parentid это позволяет параметру иметь дополнительный параметр. Итак, это было бы что-то вроде этого:

 id  |  parentid
1   |    null
2   |    null
3   |      1 
  

Мне нужно, чтобы это отображалось в моем gridview следующим образом:

 id  |  parentid
 1  |     null
 3  |      1
 2  |     null
  

любые идеи, которые я был бы очень признателен .. и на всякий случай я искал и пробовал Sql COALESCE при выборе, но это тоже не сработало..

Комментарии:

1. Я не думаю, что здесь достаточно информации, чтобы ответить на ваш вопрос каким-либо значимым образом. Ваша опция «как это должно выглядеть» отображается только для центрирования данных и замены позиций элементов 2 и 3. Как именно определяется этот порядок?

Ответ №1:

Я бы использовал ListView или DataList вместо GridView. Это должно вывести вас на правильный путь:

 <table width="595px">
    <asp:DataList BackColor="#ffffff" id="DataList1" DataKeyField="<ID>" OnItemDataBound="DataList1_ItemDataBound" runat="server" Width="100%">     
        <ItemTemplate>
           <tr>
              <td>
                  <asp:LinkButton ID="LinkButton1" runat="server" Text=" " OnCommand="LinkButton1_Command" CommandArgument='<%#Container.ItemIndex%>'></asp:LinkButton>    
              </td>
              <td><%#Eval("<COLUMN NAME>")%></td>
              <td><%#Eval("<COLUMN NAME>")%></td>
              <td><%#Eval("<COLUMN NAME>")%></td>
           </tr>
           <asp:PlaceHolder ID="plcChildView" runat="server">
               <asp:DataList ID="DataList2" runat="server" Width="100%">
                   <ItemTemplate>
                       <tr>
                          <td><%#Eval("<CHILD OLUMN NAME>")%></td>
                          <td><%#Eval("<CHILD COLUMN NAME>")%></</td>
                          <td><%#Eval("<CHILD COLUMN NAME>")%></</td>                           
                       </tr>
                   </ItemTemplate>
               </asp:DataList>
           </asp:Panel>
        </ItemTemplate>
    </asp:DataList>
</table>
  

И когда пользователь нажимает LinkButton / Button в DataList1, сделайте что-то вроде этого:

 protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
    //pass index of item in command argument
    int itemIndex = Convert.ToInt32(e.CommandArgument);      

    //find the pnlChildView control
    PlaceHolder childViewHolder = (PlaceHolder)DataList1.Items[itemIndex].FindControl("plcChildView");
    if (childViewHolder != null)
    {
        //toggle visibility of childViewPanel and bind child list if panel is visible

        if (childViewHolder.Visible)
        {
            DataList childList = childViewHolder.FindControl("DataList2");
            if (childList != null)
            {
                int keyValue = (int)DataList1.DataKeys[itemIndex];

                //bind the list using DataList1 data key value
                childList.DataSource = <DATA SOURCE>; //get data using keyValue
                childList.DataBind();
            }  
        }
    }
}
  

Комментарии:

1. спасибо, что у меня сработало, но поскольку им требовался любой дополнительный параметр, который нужно было обрабатывать на лету, мы собираемся использовать treeview: S, но просто хотел сообщить вам, что это действительно сработало для меня.