我有一个复选框页面,我选择其中一些,点击提交,然后转到第二页。在这个页面上,我有一个使用上一页选中的复选框构建的列表视图。现在我想知道如何为这个列表视图添加可排序性。
在过去,我会将CommandName ='sort'CommandArgument ='column'添加到LayoutTemplate标题上的链接。但是因为我的listview在listview之外有它的标题行,所以这似乎不起作用。关于如何实现这一点的任何想法?这就是我到目前为止所做的:
<!-- header row (outside of listview, when I try to put it as a LayoutTemplate in listview i get an error, see below) -->
<table>
<tr><% For Each i As String In Request.Form
If i.IndexOf("checkbox_") = 0 Then
Response.Write("<th>" & i.Substring(Len("checkbox_")) & "</th>")
End If
Next %></tr>
</table>
<!-- Then the listview: -->
<asp:ListView runat="server" ID="ReportListView" DataSourceID="ReportListViewSDS">
<ItemTemplate>
<table>
<tr>
<asp:PlaceHolder runat="server" ID="itemPlaceHolder" />
</tr>
</table>
</ItemTemplate>
</asp:ListView>
然后在后面的代码中:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' This works fine:
' Get the Request Vars that are checkboxes, and build the sql command.
' Run the sql command
' Databind()
End Sub
' while binding the data, build the itemPlaceholder, to contain the contents of what's returned in the sql:
Protected Sub ReportListView_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles ReportListView.ItemDataBound
If (e.Item.ItemType = ListViewItemType.DataItem) Then
Dim plc As PlaceHolder = DirectCast(e.Item.FindControl("itemPlaceHolder"), PlaceHolder)
Dim di As Data.DataRowView = e.Item.DataItem()
For Each c In di.Row.ItemArray
Dim l As New Literal
l.Text = String.Format("<td class='customreport'>{0}</td>", c.ToString)
plc.Controls.Add(l)
Next
End If
End Sub
我试图在listview中添加一个templatelayout,但是这会在绑定数据的行上给出错误(listview.databind()),我假设因为这是不可能的。
在此列表视图中获取可排序标题行的任何方法?提前致谢?新手,对不起。
答案 0 :(得分:1)
您是否考虑过处理ListView.Sorting事件,然后调用ListView.Sort方法来触发事件?
您可以在Sorting事件处理程序中添加排序逻辑,然后像这样调用Sort方法(可能来自生成的标题中的LinkButton Click事件)。
ReportListView.Sort("COLUMN", SortDirection.Ascending);
修改强>
这是一个简单的例子。我假设您正在使用基于DataSourceID命名的SqlDataSource。
我的示例使用SqlDataSource从名为Items的表中选择名为Item的列,然后在ListView中显示数据。
我创建了一个Button,它在ListView上执行Sort,指定Item列和排序方向。
<强>标记强>
<asp:Button ID="button1" runat="server" Text="Sort" OnClick="button1_Click" />
<asp:ListView ID="listView1" runat="server" DataSourceID="sqlDataSource">
<ItemTemplate>
<div><%# Eval("Item") %></div>
</ItemTemplate>
</asp:ListView>
<asp:SqlDataSource ID="sqlDataSource" runat="server" ConnectionString="Data Source=.;Initial Catalog=******;Integrated Security=SSPI;" SelectCommand="SELECT Item FROM Items">
</asp:SqlDataSource>
代码背后
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["SortDirection"] = SortDirection.Ascending;
}
}
protected void button1_Click(object sender, EventArgs e)
{
SortDirection sortDirection = (SortDirection)Session["SortDirection"] == SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending;
Session["SortDirection"] = sortDirection;
listView1.Sort("Item", sortDirection);
}
希望这有帮助。