【发布时间】:2016-04-04 13:03:30
【问题描述】:
我正在征求关于如何使用 ASP.NET 中继器进行排序的建议。
基本上希望用户能够通过单击标题字段对重复数据进行排序。
这是我的中继器
<asp:PlaceHolder runat="server" ID="phOrders">
<table>
<thead>
<tr>
<th>Date</th>
<th><asp:LinkButton ID="lnkOrderBy" runat="server" Text="Order Number" OnClick="lnkOrderBy_Click"></asp:LinkButton></th>
<th><asp:linkButton ID="lnkOrderByItem" runat="server" Text="Item" OnClick="lnkOrderByIte_Click"></asp:linkButton></th>
<th>Size</th>
<th>QTY</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<asp:Repeater ID="rprOrders" runat="server" >
<ItemTemplate>
<tr>
<td><strong><%# Eval("OrderDate") %></strong></td>
<td><%# Eval("OrderItemSKUName") %></td>
<td><%# Eval("OrderItemSKUID") %></td>
<td></td>
<td><%# Eval("OrderItemUnitCount") %></td>
<td><strong><%# Eval("OrderItemStatus") %></strong></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</tbody>
</table>
<div class="track-footer"></div>
</asp:PlaceHolder>
我应该将数据存储在 ViewState 中然后进行排序吗?还是查询数据库的每次点击事件?
这是我用于填充中继器的代码
private void PopulateOrders()
{
CustomerInfo ki = CustomerInfoProvider.GetCustomerInfoByUserID(CooneenHelper.GetUserImpersonisationID());
int nKustomerID = ki.CustomerID;
DataTable dts = new DataTable();
dts.Columns.Add("OrderDate", typeof(string));
dts.Columns.Add("OrderItemSKUName", typeof(string));
dts.Columns.Add("OrderItemSKUID", typeof(string));
dts.Columns.Add("OrderItemStatus", typeof(string));
dts.Columns.Add("OrderItemUnitCount", typeof(string));
QueryDataParameters qdp = new QueryDataParameters();
qdp.Add("@CustomerID", nKustomerID);
DataSet ds = gc.ExecuteQuery("CN_OrderList", qdp, QueryTypeEnum.StoredProcedure, true);
foreach (DataRow dr in ds.Tables[0].Rows)
{
DataRow drNew = dts.NewRow();
drNew["OrderDate"] = ValidationHelper.GetDateTime(dr["OrderDate"], DateTime.Now).ToShortDateString();
drNew["OrderItemSKUName"] = dr["OrderItemSKUName"].ToString();
drNew["OrderItemSKUID"] = dr["OrderItemSKUID"].ToString();
drNew["OrderItemStatus"] = dr["OrderItemStatus"].ToString();
drNew["OrderItemUnitCount"] = dr["OrderItemUnitCount"].ToString();
dts.Rows.Add(drNew);
}
PagedDataSource pds = new PagedDataSource();
pds.DataSource = dts.DefaultView;
DataView view = dts.DefaultView;
//allow paging, set page size, and current page
pds.AllowPaging = true;
pds.PageSize = PerPage;
pds.CurrentPageIndex = CurrentPage;
//show # of current page in label
if (pds.PageCount > 1) litResults.Text += " - Showing page " + (CurrentPage + 1).ToString() + " of " + pds.PageCount.ToString();
//disable prev/next buttons on the first/last pages
btnPrev.Enabled = !pds.IsFirstPage;
btnNext.Enabled = !pds.IsLastPage;
rprOrders.Visible = true;
rprOrders.DataSource = pds;
rprOrders.DataBind();
}
【问题讨论】:
-
那是旧的asp.net?与客户端代码集成如此糟糕的那个? IE。不是mvc?转向现代技术 (ASP.NET MVC) 是一种选择吗?这让事情变得容易多了,您可以在客户端做事。
-
@TomTom MVC 不是一个选项 :(
-
如果您想在客户端这样做,请查看第三方库以替换中继器,例如datatables.net
-
您好 Zaki,感谢您的回复。第一个链接很有帮助,但是我找到了一个类似的教程shravanti88.blogspot.co.uk/2012/03/sorting-in-repeater.html,但它并不完全适用于我的解决方案。更新帖子。