我正在开发一个ListView,我感觉在实现排序时,我正在做一些根本错误的事情。我求助于隐藏字段,而不是依赖于List1.SortExpression和List1.SortDirection的值,因为List1.SortExpression始终为空,而List1.SortDirection始终为SortDirection.Ascending。
在我的.aspx页面上:(编辑掉不相关的代码)
<asp:HiddenField runat="server" ID="hdnSortExpression" />
<asp:HiddenField runat="server" ID="hdnSortDirection" />
<asp:ListView runat="server" ID="List1"
OnItemCommand="List1_ItemCommand"
OnSorting="List1_Sorting">
<LayoutTemplate>
<table border="0" cellpadding="1">
<thead>
<tr>
<th><asp:LinkButton runat="server" ID="BtnCompanyCode" CommandName="Sort" CommandArgument="CompanyCode" Text="Company Code" /></th>
... more columns ...
</tr>
</thead>
<tbody>
<tr runat="server" id="itemPlaceholder"></tr>
</tbody>
</table>
</LayoutTemplate>在我的代码背后:
protected void List1_ItemCommand(object sender, ListViewCommandEventArgs e)
{
// empty for now
}
protected void List1_Sorting(object sender, ListViewSortEventArgs e)
{
SortDirection sortDirection;
String sortExpression = e.SortExpression; // how we need to do it in Sorting
if (hdnSortExpression.Value.ToLower() == sortExpression.ToLower())
sortDirection = hdnSortDirection.Value == SortDirection.Ascending.ToString() ? SortDirection.Descending : SortDirection.Ascending;
else
sortDirection = SortDirection.Ascending;
DoSortList(sortExpression, sortDirection); // this sets column headings' sort indicator arrows
List1_BindData(sortExpression, sortDirection); // sets DataSource and calls DataBind()
// the hacky part: setting hidden fields to store sortExpression and sortDirection
hdnEligibilitySortExpression.Value = sortExpression;
hdnEligibilitySortDirection.Value = sortDirection.ToString();
}
private void List1_BindData(String sortExpression, SortDirection sortDirection)
{
List<SomeEntity> list = null;
list = SomeEntity.GetBySsn(_ssn).ToList(); // methods generated by an ORM pointing to an Oracle database
switch (sortExpression.ToLower())
{
case "CompanyCode":
if (sortDirection == SortDirection.Ascending)
List1.DataSource = list.OrderBy(o => o.CompanyCode);
else
List1.DataSource = list.OrderByDescending(o => o.CompanyCode);
break;
... other cases ...
}
List1.DataBind();
}它是有效的--每一列都得到了正确的排序,单击相同的列会颠倒排序方向,但我必须得出结论,因为我不能依赖SortDirection和SortExpression属性,所以我错误地连接了这些内容。我做错了什么?
发布于 2012-10-04 00:55:31
看看这个MSDN example。您将注意到DataSource是一个SqlDataSource。这是.Net知道如何排序的DataSource类型之一。其他人,就没那么多了。
下面是另一个指定DataSource类型的MSDN article:
为排序提供内置支持的数据源控件有LinqDataSource、ObjectDataSource、SqlDataSource和AccessDataSource控件。
发布于 2012-10-04 00:43:00
你能不能像List1.SortDirection和List1.SortExpression一样把它从ListView中拉出来,而不是使用e.SortDirection?
https://stackoverflow.com/questions/12712787
复制相似问题