如何允许对网格视图进行排序? [英] How to allow sorting of a gridview?
问题描述
我有一个 gridview 并启用了排序.运行应用程序时,我单击第一列进行排序.我收到此错误:未处理的 GridView 'gvOutlookMeldingen' 触发事件排序."
这是网格视图:
<asp:GridView ID="gvOutlookMeldingen" runat="server" AllowSorting="True" AutoGenerateColumns="False" AutoGenerateSelectButton="True" onselectedindexchanged="GridView_SelectedIndexChanged"><列><asp:TemplateField HeaderText="Melder" ItemStyle-HorizontalAlign="Center" SortExpression="Melder"><HeaderStyle BorderColor="#1A3491" Width="130px"></HeaderStyle><ItemStyle Height="20px" HorizontalAlign="Center"></ItemStyle><项目模板><%# (string)Eval("Melder")%></ItemTemplate></asp:TemplateField><asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp"/><asp:TemplateField HeaderText="Omschrijving"><项目模板><div style="overflow:auto; width: 500px; height: 200px;"><asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label>
</ItemTemplate></asp:TemplateField><asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum"/><asp:BoundField DataField="OutlookID" HeaderText="OutlookID"/></列></asp:GridView>
感谢任何帮助
您的 BoundField
中缺少 SortExpression
,如其他答案中所述.
您还使用了 TemplateField
,根据生成数据的内容,除了使用 SortExpression
之外,它可能需要手动排序.
如果是这种情况,那么要手动排序,一种方法是在 GridView
、SortExpression
中添加一个 OnSorting
回调到您的字段和在您的代码隐藏中回调的方法.
这将导致标记和代码类似于(未经测试):
<asp:GridView ID="gvOutlookMeldingen" runat="server"允许排序 =真"OnSorting="gvOutlookMeldingen_Sorting"AutoGenerateColumns="假"AutoGenerateSelectButton="True"onselectedindexchanged="GridView_SelectedIndexChanged"><列><asp:BoundField DataField="Melder" HeaderText="Melder" SortExpression="Melder"/><asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" SortExpression="Onderwerp"/><asp:TemplateField HeaderText="Omschrijving" SortExpression="Omschrijving"><项目模板><div style="overflow:auto; width: 500px; height: 200px;"><asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label>
</ItemTemplate></asp:TemplateField><asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" SortExpression="Meldingsdatum"/><asp:BoundField DataField="OutlookID" HeaderText="OutlookID" SortExpression="OutlookID"/></列></asp:GridView>
...和:
protected void gvOutlookMeldingen_Sorting(object sender, GridViewSortEventArgs e){开关(e.SortExpression){案例Melder":如果(e.SortDirection == SortDirection.Ascending){gvOutlookMeldingen.DataSource =//Melder 字段的 Asc 查询;gvOutlookMeldingen.DataBind();}别的{gvOutlookMeldingen.DataSource =//Melder 字段的 Desc 查询;gvOutlookMeldingen.DataBind();}休息;//其他字段的 case 语句.}}
I have a gridview and enabled sorting. When running the application I click on the first column to sort. And I get this error: "The GridView 'gvOutlookMeldingen' fired event Sorting which wasn't handled."
This is the gridview:
<asp:GridView ID="gvOutlookMeldingen" runat="server" AllowSorting="True" AutoGenerateColumns="False" AutoGenerateSelectButton="True" onselectedindexchanged="GridView_SelectedIndexChanged">
<Columns>
<asp:TemplateField HeaderText="Melder" ItemStyle-HorizontalAlign="Center" SortExpression="Melder">
<HeaderStyle BorderColor="#1A3491" Width="130px"></HeaderStyle>
<ItemStyle Height="20px" HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<%# (string)Eval("Melder") %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" />
<asp:TemplateField HeaderText="Omschrijving">
<ItemTemplate>
<div style="overflow:auto; width: 500px; height: 200px;">
<asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label>
</div>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" />
<asp:BoundField DataField="OutlookID" HeaderText="OutlookID" />
</Columns>
</asp:GridView>
Any help is appreciated
You are missing SortExpression
's in your BoundField
's as mentioned in the other answers.
You are also using a TemplateField
which, depending on what is generating your data, may require manual sorting beyond use of SortExpression
.
If this is the case, then to sort manually, one method is to add an OnSorting
callback to the GridView
, SortExpression
's to your fields and a method to callback in your code-behind.
This would result in markup and code similar to (untested):
<asp:GridView ID="gvOutlookMeldingen" runat="server"
AllowSorting="True"
OnSorting="gvOutlookMeldingen_Sorting"
AutoGenerateColumns="False"
AutoGenerateSelectButton="True"
onselectedindexchanged="GridView_SelectedIndexChanged">
<Columns>
<asp:BoundField DataField="Melder" HeaderText="Melder" SortExpression="Melder" />
<asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" SortExpression="Onderwerp" />
<asp:TemplateField HeaderText="Omschrijving" SortExpression="Omschrijving">
<ItemTemplate>
<div style="overflow:auto; width: 500px; height: 200px;">
<asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label>
</div>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" SortExpression="Meldingsdatum" />
<asp:BoundField DataField="OutlookID" HeaderText="OutlookID" SortExpression="OutlookID" />
</Columns>
</asp:GridView>
...and:
protected void gvOutlookMeldingen_Sorting(object sender, GridViewSortEventArgs e)
{
switch (e.SortExpression)
{
case "Melder":
if (e.SortDirection == SortDirection.Ascending)
{
gvOutlookMeldingen.DataSource = // Asc query for Melder field;
gvOutlookMeldingen.DataBind();
}
else
{
gvOutlookMeldingen.DataSource = // Desc query for Melder field ;
gvOutlookMeldingen.DataBind();
}
break;
// case statements for your other fields.
}
}
这篇关于如何允许对网格视图进行排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!