C# 使用C向嵌套的Gridview ASP.net添加排序#
我在我的页面上到处寻找如何实现这一点。我有一个顶级gridview,它允许在页面编译时动态生成排序和嵌套gridview,因此在动态html div中有“x”个嵌套gridview,可以通过用户命令从不可见切换到可见。我遇到的问题是,我不知道如何在不折叠div/导致回发的情况下允许对这些嵌套的GridView进行排序 下面显示如何在asp.net中生成主gridview(gvSalesDiv)和嵌套gridview(gvTheDivisionCustomers)C# 使用C向嵌套的Gridview ASP.net添加排序#,c#,asp.net,visual-studio,sorting,gridview,C#,Asp.net,Visual Studio,Sorting,Gridview,我在我的页面上到处寻找如何实现这一点。我有一个顶级gridview,它允许在页面编译时动态生成排序和嵌套gridview,因此在动态html div中有“x”个嵌套gridview,可以通过用户命令从不可见切换到可见。我遇到的问题是,我不知道如何在不折叠div/导致回发的情况下允许对这些嵌套的GridView进行排序 下面显示如何在asp.net中生成主gridview(gvSalesDiv)和嵌套gridview(gvTheDivisionCustomers) <asp:Grid
<asp:GridView ID="gvSalesDiv" AllowSorting="true" onsorting="GridView1_Sorting" runat="server" GridLines="Both" OnRowDataBound="gvOrderLineDetail_RowDataBound" AutoGenerateColumns="False"
Width="100%" Height="210px" BackColor="WhiteSmoke" AlternatingRowStyle-BackColor="#DADDE2"
HeaderStyle-Font-Size="Medium" Visible="true">
<Columns>
<asp:TemplateField HeaderText="Toggle Detail">
<ItemTemplate>
<a href="javascript:switchViews('div<%# Eval("SalesDivision") %>');">
<img id="imgdiv<%# Eval("SalesDivision") %>" alt="toggle" border="0"
src="/salesconsole/toggle-off.png" />
</a>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="SalesDivision" HeaderText="Sales Division">
<ItemStyle Font-Bold="True" ForeColor="CornflowerBlue" HorizontalAlign="Center"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="LastDay" SortExpression="LastDay" DataFormatString="{0:C}" HeaderText="Last 24 Hours" >
</asp:BoundField>
<asp:BoundField DataField="LastWeek" SortExpression="LastWeek" DataFormatString="{0:C}" HeaderText="Last 7 Days" >
</asp:BoundField>
<asp:BoundField DataField="Last30Days" SortExpression="Last30Days" DataFormatString="{0:C}" HeaderText="Last 30 Days" >
</asp:BoundField>
<asp:BoundField DataField="Last3Months" SortExpression="Last3Months" DataFormatString="{0:C}" HeaderText="Last 3 Months" >
</asp:BoundField>
<asp:BoundField DataField="Last6Months" SortExpression="Last3Months" DataFormatString="{0:C}" HeaderText="Last 6 Months" >
</asp:BoundField>
<asp:BoundField DataField="LastYear" SortExpression="LastYear" DataFormatString="{0:C}" HeaderText="Last Year" >
</asp:BoundField>
<asp:TemplateField>
<ItemTemplate>
<tr>
<td colspan="100">
<div id="div<%# Eval("SalesDivision") %>" style="display:none;position:relative;left:25px;" >
<h3 title="<%# Eval("SalesDivision") %> Sales"><%# Eval("SalesDivision") %> Sales Breakdown</h3>
<asp:GridView ID="gvTheDivisionCustomers" AllowSorting="true" onsorting="GridView2_Sorting" BackColor="WhiteSmoke" AlternatingRowStyle-BackColor="#DADDE2"
Width="100%"
AutoGenerateColumns="false" runat="server">
<Columns>
<asp:TemplateField HeaderText="Show More Detail">
<ItemTemplate>
<a href="sales-customers-detail.aspx?CustomerID=<%# Eval("CustomerID") %>&CustomerName=<%# Eval("CustomerName") %>" target="_blank" style="color:Blue; text-decoration:underline"> More Details
</a>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="CustomerID" HeaderText="ID"/>
<asp:BoundField DataField="CustomerName" HeaderText="Name" />
<asp:BoundField DataField="Last24Hours" HeaderText="Last 24 Hours" SortExpression="LastDay" DataFormatString="{0:C}" />
<asp:BoundField DataField="Last7Days" HeaderText="Last 7 Days" SortExpression="Last7Days" DataFormatString="{0:C}" />
<asp:BoundField DataField="Last30Days" HeaderText="Last 30 Days" SortExpression="Last30Days" DataFormatString="{0:C}" />
<asp:BoundField DataField="Last3Months" HeaderText="Last 3 Months" SortExpression="Last3Months" DataFormatString="{0:C}" />
<asp:BoundField DataField="Last6Months" HeaderText="Last 6 Months" SortExpression="Last6Months" DataFormatString="{0:C}" />
<asp:BoundField DataField="LastYear" SortExpression="LastYear" HeaderText="Last Year" DataFormatString="{0:C}" />
</Columns>
</asp:GridView>
</div>
</td></tr>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
如果要了解如何获取gridview所在的父div,可以使用以下方法: 首先,您需要将发送者强制转换为gridview,然后创建一个html元素并将其强制转换为gridview的父元素。像这样:
Dim test As Button = CType(sender, Button)
Dim div As HtmlGenericControl
div = CType(test.Parent, HtmlGenericControl)
Dim t As String = test.ID
在本例中,我将发送者强制转换为一个按钮,但您可以轻松更改此按钮。在本例中,需要使用“runat=“server”在服务器上运行div。如果不想在服务器端创建它,可以更改将HTMLGenericControl强制转换为ContentPlaceHolder的方式。如果这有帮助或者您需要更多信息,请告诉我。因此,基本上我们可以说,您正在寻找一个ID或一些可以创建排序方法查询的东西? 如果这是正确的,我们可以找到解决办法。 在第一个GridView(gvSalesDiv)ItemTemplate中放置一个新标签,如下所示:
<asp:Label ID="lblID" runat="server" Text='<%# Bind("Id") %>'></asp:Label>
希望它能起作用 感谢这一点,我可以看到这将如何工作,下一个问题是,这会导致页面状态丢失,即当我单击对内部gridview进行排序时,当外部gridview正在“重新绑定”时,Div将崩溃。您知道如何维护div的状态吗?也许您可以尝试使用ajaxupdatePanel控件强制重新加载gridview,而无需进行完整的页面回发。
<asp:Label ID="lblID" runat="server" Text='<%# Bind("Id") %>'></asp:Label>
Label lblID = (Label)((GridView)sender).NamingContainer.FindControl("lblID");