#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, но просто хотел сообщить вам, что это действительно сработало для меня.