我有不同对象的两个列表:合并和两个列表绑定到一个GridView
List<Report>
List<Newsletter>
每一个都具有“创建日期”属性。我需要按降序对两个列表的创建日期进行排序,并将其绑定到一个gridview。
如何做到这一点,因为我只能提供一个数据源?
我有不同对象的两个列表:合并和两个列表绑定到一个GridView
List<Report>
List<Newsletter>
每一个都具有“创建日期”属性。我需要按降序对两个列表的创建日期进行排序,并将其绑定到一个gridview。
如何做到这一点,因为我只能提供一个数据源?
你可以先创建日期的List
:
var rows = reports.Select(x => x.CreateDate).Union(news.Select(x => x.CreateDate)).OrderByDescending(x => x.Date).ToList();
然后用DataTable
结构结合:
DataTable dt = new DataTable();
dt.Columns.Add("Date");
foreach (var row in rows) {
dt.Rows.Add(row);
}
grid.DataSource = dt;
如果两种类型有你想要显示相同的属性,那么你可以创建他们都实现的接口。那么你的观点可以有以下几点。
伪代码:
List<IDisplayReportsAndNewsletter> data = new List<IDisplayReportsAndNewsletter>();
data.Addrange(reports);
data.Addrange(newsletters);
grid.Datasource = data.OrderBy(d => d.CreatedDate).ToList();
其中报告和简报是你描述上面对类现在实现新IDisplayReportsAndNewsletter接口列表。
从数据集选项(这也是有效的)中获得的主要好处是,您仍然可以在视图中使用您的域对象,而不必在数据集行之间进行翻译。
的缺点是,你与接口污染你的域对象只为您的视图的目的
在这里,我将只获得绑定到网格视图的日期时间值。我需要将名称,日期和状态绑定到网格。我如何选择使用lambda表达式的3个属性? – NewBie 2012-03-26 09:30:17
您可以选择匿名对象而不仅仅是日期 – ionden 2012-03-26 10:04:23
明白了。匿名对象完成了这项工作。谢谢。 – NewBie 2012-03-26 10:34:21