鉴于以下查询,如何在“salesPriceNo”上创建分层网格,以便父网格显示所有“h”数据,子网格将显示所有“d”数据?我在“通用用户指南”中找到了以下内容,但它没有提到WebForms。
SELECT h.salesPriceNo, h.customerNo, h.status, h.itemNo, h.salesPersonCode, d.salesPriceDtlNo, d.salesPriceNo, d.itemNo, d.qtyPer, d.unitCost
FROM salesPriceHeader h LEFT OUTER JOIN salesPriceDetail d ON h.salesPriceNo = d.salesPriceNo
WHERE h.customerNo = 'MyCustomerNo12345'
答案 0 :(得分:0)
Syncfusion ASP.Net Grid
控件没有内置支持来使用Hierarchical Grid功能。但我们可以使用网格的DetailsTemplate
功能来满足您的要求。详细信息模板功能通过展开行提供有关每行其他信息的详细视图。
我们可以通过以下方式满足您的要求。请参阅以下代码段。
<ej:Grid id="Grid" runat="server" DetailsTemplate="#childgridtemplae">
<Columns>
<ej:Column Field="salesPriceNo" HeaderText="SalesPrice NO"/>
<ej:Column Field="customerNo" HeaderText="Customer No"/>
<ej:Column Field="status" HeaderText="Status"/>
<ej:Column Field="itemNo" HeaderText="Item No"/>
<ej:Column Field="SalesPersonCode" HeaderText="SalesPerson Code"/>
</Columns>
<ClientSideEvents DetailsDataBound="onDetailsDataBound" />
</ej:Grid>
在后面的代码中,使用查询获得的数据(询问的问题)可以按如下方式分配给父网格。
protected void Page_Load(object sender, EventArgs e)
{
this.Grid.DataSource = (DataTable)GetData();//Return data from join operation
this.Grid.DataBind();
}
在上面你可以看到顶级网格将包含salesPriceHeader
表中的列,用于显示子网格的detailsTemplate如下所示。
<script type="text/x-jsrender" id="childgridtemplae">
<div id="SaleChildGrid{{:salesPriceNo}}" class="e-childgrid" ></div>
</script>
子网格的id是根据salesPriceNo字段动态生成的。
现在在detailsDataBound
事件中,子网格将呈现如下。
function onDetailsDataBound(e) {
e.detailsElement.find(".e-childgrid").ejGrid({
dataSource: this.model.dataSource, //Parents data source
columns: [
{ field: "salesPriceDtlNo", headerText: "SalesPrice Dlt No" },
{ field: "salesPriceNo", headerText: "SalesPrice No" },
{ field: "itemNo", headerText: "Item No" },
{ field: "qtyPer", headerText: "Quantity" },
{ field: "unitCost", headerText: "Unit Cost" }
]
});
}
在上面的事件处理程序中,您可以注意到子网格包含salesPriceDetail
表中的列,并且父数据源也直接提供给子数据源,因为连接操作是在服务器上执行的,因此没有过滤在客户端需要获取详细信息网格数据。现在父网格和子网格使用相同的数据源进行渲染,salesPriceHeader
(h)中的列显示在父网格中,salesPriceDetail
(d)显示在子网格中。