我需要构建一个<table>
来显示产品。我对GridView或ListView不太熟悉,不确定他们是否可以在下面执行这些操作。
要求:
有没有人知道任何可以执行上述操作的ASP.NET控件?提前谢谢!
答案 0 :(得分:2)
GridView
和ListView
如果在其中放置DataPager
,则可以进行分页。 ListView
是一个模板控件 - 显示是完全自定义的,因此您必须滚动自己的“列”;对GridView
没什么用处,所以我不知道那个。
至于搜索和排序,如果你需要一个数据源ASP.NET无法直接查询,那么它就会有一些内置的支持变得无用 - ObjectDataSource
允许你创建自己的数据访问代码,但你还必须实现一些无法自动完成的事情。
对于搜索,您可以处理ODS的Selecting
事件,您可以将任意参数传递给查询方法;我相信还有一些方法可以自动获取控制值/查询字符串参数等。
对于排序,ListView
可让您将Button
添加到CommandName="Sort"
和CommandArgument="[column to sort by]"
的位置。使用非自定义数据源时,我相信它们会正常工作。使用ObjectDataSource
时,他们所做的只是让ListView
跟踪“排序表达式”,您可以将其传递到ODS.Selecting
事件中的数据源。排序表达式的格式是指定的...在我需要的时候我永远找不到的地方。使用单列排序时,对于升序排序,这将是"[column name]"
,对于降序排序,则为"[column name] DESC"
。您可以直接将其传递给ObjectQuery.OrderBy
; EntityFramework.Extended
还为新的API表面提供了扩展方法。 ListView
(我相信)只处理单列排序,对于多列排序,您必须自己管理排序表达式。
所有这些内容的文档是分散的,一个很好的起点是this tutorial,它的后续内容以及您可以在左侧边栏中找到ListView
的链接。
我的项目也合理地简单地使用了ListView
和ObjectDataSource
- 意思是,它的任何部分都不依赖于神奇的RAD功能,如下所示。我从实际项目中提取它,因此可能会有轻微的不一致。
ListView
+ ObjectDataSource
示例以下示例从WCF服务(未包含)中检索“消息”(在公司门户网站上查看新闻公告)。
调用WCF服务的ObjectDataSource
委托。数据源负责:
username
和type
参数sort
参数skip
和take
参数指定的因为我们正在使用ObjectDataSource
,所有这些都已在委托中实现 - 这是最终调用服务的地方。
public enum MessageType
{
None = 0,
All,
General,
OfficeHoursUpdate,
// …
}
[DataObject]
public class MessagesDataSource : IDisposable
{
IMessagesService _svc = new MessagesServiceClient();
[DataObjectMethod(DataObjectMethodType.Select)]
public IEnumerable<Message> Select(string username, MessageType type, string sort, int skip, int take)
{
return _svc.GetMessages(username, type, sort, skip, take);
}
public int SelectCount(string username, MessageType type, string sort, int skip, int take)
{
return _svc.CountMessages(username, type);
}
}
将消息列表呈现为一个表,每条消息有一个<tbody>
,其中一行拆分为消息“headers”的列,第二行包含为消息正文合并的所有列。注意事项:
ListView
。MessageDataSource.Select()
和.SelectCount()
方法采用的所有参数都应在ODS的<SelectParameters>
中声明。 (如果Visual Studio不匹配,Visual Studio将显示错误。)TypeName
属性指示由ODS实例化的ODS委托。要更好地控制此操作,请处理ODS的ObjectCreating
/ ObjectCreated
事件。 (例如,您可以将包含控件传递给ODS代理。)StartRowIndexParameterName
和MaximumRowsParameterName
属性命名的参数值将由数据分页器自动提供。SortParameterName
时ListView
填充ObjectDataSource
参数的值 - 使用{{1}时可能会或可能不会}。我也不认为在这种情况下这是必要的,但是再次保持在那里不会伤害任何人。GridView
的{{1}}值不必匹配数据对象的属性,实际上可以完全任意。CommandArgument
这个课程相当简单,主要涉及初始化页面和排序指标等切线问题。大多数“有趣”的位都添加了注释。
LinkButton
免责声明:我并不声称自己是该主题的权威,事实上我对.NET也是新手。这恰好是我最近必须处理的事情,并且也被分散的文档所困惑,这些文档倾向于采用一部分问题的快捷方式(即使用GridView自动获取完整视图,或使用ADO.NET数据源而不是自定义数据访问代码);或者在绒毛上花费太多空间(例如,在Visual Studio向导中单击按钮的截图。)
答案 1 :(得分:1)
这不是免费的,但Telerik的RadGrid功能非常全面,可以100%满足您的需求,否则它会让您非常接近。
Telerik RadGrid:http://demos.telerik.com/aspnet-ajax/grid/examples/overview/defaultcs.aspx
答案 2 :(得分:0)
如果您的数据仅在未编辑或更新时显示,则可以使用Data Repeater
控件。它是一个非常轻量级的控件,但是你可能已经编写了所有的分页和排序逻辑。它在某种程度上是好的,这样你就可以对代码进行细致的控制..
点击此链接了解详情。ASP.net Repeater Control