我对 Gridview 排序有一个问题,它与其他排序类似,但我绑定到集合对象而不是数据表。
应用程序的现有业务规则和数据访问层遵循拥有一个对象的模式,如果您需要该类型的对象的集合,则拥有另一个继承 CollectionBase 并实现 IBindingList 的类。
对于桌面应用程序,很容易将 gridview 数据绑定到这些对象之一,并且打开列排序没有任何问题。桌面应用程序的表示层中的一切都处于“状态”。
现在该代码正被移至新的 Web 应用程序(ASP.NET 2.0、VB 代码隐藏页面)。
我已经玩弄了我必须做的事情,只让集合的某些列显示在 gridview 中,并且 gridview 看起来相当不错。当我打开“允许排序”时,问题就出现了。
我收到了关于没有 .Sorting 方法等的错误。在研究这个时,如果我的源是数据表,我发现各种解决方案都可以通过数据视图轻松实现。但它不是——它是一个集合。我试图通过将集合转换为 XML 内存流来“廉价拍摄”数据源,然后他们尝试将 .ReadXML 重新转换为数据集,但这没有用 [就我在数据集中得到的根元素丢失错误而言。 ReadXml(ioTemp) 其中 ioTemp 是 xml 序列化程序中使用的 System.IO.MemoryStream]。
由于旧的桌面应用程序,我从不用担心对集合进行排序,因为 gridview 会在加载后处理它。事实上,集合的 .SortProperty、.SortDirection 和 .ApplySort 都是通过 NotSupportedExceptions 实现的“标准”(我从早已不复存在的程序员那里继承了这段代码)。
有没有一种简单的方法可以将集合转换为数据表或对集合进行排序而不必每次都返回数据库?对象数据源无法工作,因为对象构建方式的复杂规则 - VS2005 中的向导无法处理我们需要做的事情(有条件地从多个表中获取数据以创建对象)。
提前致谢。