【发布时间】:2011-09-28 16:20:06
【问题描述】:
使用 LayoutTemplate 中的列标题对列表视图进行排序
我可以使用 asp:SqlDataSource 对基本列表视图进行排序,并通过将其指向 asp:SqlDataSource ID 来设置列表视图属性 DataSourceID。我在不使用 asp:SqlDataSource 并且仅使用后面代码中的 DataBinding 进行排序时遇到问题。
SqlDataSource 示例:
<asp:ListView ID="ContactsListView" DataSourceID="ContactsDataSource" runat="server">
<LayoutTemplate>
<table width="640px" runat="server">
<tr class="header" align="center" runat="server">
<td>
<asp:LinkButton runat="server" ID="SortByFirstNameButton" CommandName="Sort" Text="First Name" CommandArgument="FirstName" />
</LayoutTemplate>
....
</asp:ListView>
<asp:SqlDataSource ID="ContactsDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:MainConnString %>"
SelectCommand="SELECT * FROM TableName">
</asp:SqlDataSource>
数据绑定示例:
<asp:ListView ID="ContactsListView" DataSourceID="ContactsDataSource" runat="server">
<LayoutTemplate>
<table width="640px" runat="server">
<tr class="header" align="center" runat="server">
<td>
<asp:LinkButton runat="server" ID="SortByFirstNameButton" CommandName="Sort" Text="First Name" CommandArgument="FirstName" />
</LayoutTemplate>
....
</asp:ListView>
protected void Page_Load(object sender, EventArgs e)
{
String SQL = "SELECT * FROM Customer";
SqlDataAdapter da= new SqlDataAdapter(SQL, ConnStr);
DataSet ds = new DataSet();
da.Fill(ds);
ContactsListView.DataSource = ds.Tables[0];
ContactsListView.DataBind();
}
两个代码示例都填充列表视图,但第二个示例数据绑定不适用于排序。对于第一个示例,排序仅适用于 LayoutTemplate 中添加的 asp:LinkButton 添加 CommandName="sort" 并设置 CommandArugment="ColumnName",但不适用于第二个示例。
谁能解释一下为什么以及如何使用 DataBind 方法背后的代码进行排序?
谢谢!
【问题讨论】:
-
您的代码中没有处理排序的内容 - 您尝试了什么导致了问题?您可以在 SQL 查询中添加一个
ORDER BY子句,或者添加一些代码隐藏来对数据绑定进行排序——这取决于您想要实现的目标;让我们知道。 -
这两个示例都填充了列表视图,但对于第一个示例,当单击列标题时,我不必添加任何其他代码来使排序工作。
-
我想出了我的解决方案,并将在今晚晚些时候发布。我的声誉不允许我在 8 小时后发布。基本上如以下答案所示,我必须创建自己的 OnSort 事件处理程序,将数据库重新查询到 DataTable 中,对 DataTable 进行排序,然后将其绑定回 ListView。如果有无需再次调用数据库的方法,请告诉我。
标签: asp.net data-binding listview sorting