如何允许排序gridview?
我有一个gridview并启用排序。在运行应用程序时,我点击第一列进行排序。我得到这个错误:“GridView的'gvOutlookMeldingen'触发事件排序不处理。”如何允许排序gridview?
这是在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>
任何帮助表示赞赏
如在其他答案中所述,您在BoundField
中缺少SortExpression
。
您还在使用TemplateField
,根据生成数据的内容,可能需要手动排序才能使用SortExpression
。
如果是这样的话,那么手动排序,一种方法是一个OnSorting
回调添加到GridView
,SortExpression
的你的领域和方法在你的回调代码隐藏。
这将导致标记和代码类似(未经测试):
<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>
...和:
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.
}
}
什么关于我使用数据表的数据源。所以我必须对这个数据表进行排序?你知不知道怎么? – SamekaTV 2011-03-18 13:28:59
有几种方法可以做到这一点,我通常使用Linq出于习惯。这里有一个很好的答案:http://*.com/questions/10855/linq-query-on-a-datatable – Kynth 2011-03-18 13:36:47
如果我正在使用DataSource的文件夹中的文件,我该如何能够实现那? http://*.com/questions/24491778/how-to-allow-sorting-in-gridview – SearchForKnowledge 2014-06-30 14:03:32
我假设你的网格视图的数据源是一个DataTable,所以我认为你必须添加
SortExpression="column name"
在每个asp:你喜欢能够分类的Boundfield,
例如
<asp:BoundField DataField="Melder" SortExpression="Melder" HeaderText="Melder" />
您需要设置要在其上排序的列的SortExpression
属性。而且您需要将事件处理程序添加到Sorting
事件中,以便对您的DataSource进行排序。
欲了解更多信息,请参阅this MSDN article或this example with sorting and paging。
此代码可以帮助(为你们谷歌上搜索这个老帖子):
protected void gvOutlookMeldingen_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dt = (DataTable)Session["mySessionStoredTable"];
dt.DefaultView.Sort = e.SortExpression // column name
+ " " + SortDir(e.SortExpression); // sort direction
gv.DataSource = dt;
gv.DataBind();
}
private string SortDir(string sColumn)
{
string sDir = "asc"; // ascending by default
string sPreviousColumnSorted = ViewState["SortColumn"] != null
? ViewState["SortColumn"].ToString()
: "";
if (sPreviousColumnSorted == sColumn) // same column clicked? revert sort direction
sDir = ViewState["SortDir"].ToString() == "asc"
? "desc"
: "asc";
else
ViewState["SortColumn"] = sColumn; // store current column clicked
ViewState["SortDir"] = sDir; // store current direction
return sDir;
}
如下所述,我可以建议看看Linq to SQL。看起来这个表是使用sql填充的。使用Linq to SQL,它使得这件事更容易排序 – Neale 2011-03-18 19:34:08
更好的方法是http://*.com/questions/3966835/sorting-gridview – Sami 2013-03-18 16:12:14