2012-03-27 5 views
0

У меня есть два списка различных типовКак связать сетку с двумя разными списками?

List<Report> 
List<Newsletter> 

Есть ли способ связать GridView с обоих списках? Оба класса не реализуются из общего интерфейса.

Мне просто нужно отобразить name и status в пределах свойств объекта. Я имею в виду, что тип свойств, которые я хочу связывать, является общим для обоих списков.

+0

вы имеете в виду имя свойства .. –

+0

Вы спрашивали вчера о том, чтобы сделать их в 1 список. Вы можете связать gridview в readonly с этим списком. –

+0

Нет, имя - это свойство внутри моего объекта. Это строка типа и Status - это перечисление – NewBie

ответ

1

Может быть что-то вроде этого:

ASPX

<asp:GridView ID="gv" runat="server"> 
    <Columns> 
     <asp:BoundField DataField="name" HeaderText="Name" /> 
     <asp:BoundField DataField="status" HeaderText="Status" /> 
    </Columns> 
</asp:GridView> 

метод CS

gv.DataSource=reportList 
       .Select(x => new {x.Status,Name= x.text }) 
       .Concat(
       newsList 
       .Select(x => new {Status=x.Status.ToString(),Name= x.text })); 
gv.DataBind(); 
+1

Я думаю, что это «чище», чем моя версия, поскольку вы можете использовать LINQ с анонимным типом, который не требует создания дополнительного класса. – ChrFin

0

Вы можете использовать Cast(), то объединение списков

grv.DataSource = l1.Cast<object>().Union(l2.Cast<object>()); 
0

Не сразу, но вы можете создать какой-то промежуточный класс:

public class ReporterNewsletterMixer 
{ 
    public Reporter Reporter { get; set; } 
    public Newsletter Newsletter { get; set; } 

    public string Name 
    { 
     get 
     { 
      if(Reporter == null) 
       return Newsletter.Name; 
      return Reporter.Name; 
     } 
    } 
    //same for status 

    public ReporterNewsletterMixer(Reporter reporter) { Reporter = reporter; } 
    public ReporterNewsletterMixer(Newsletter news) { Newsletter = news; } 
} 

Затем вы можете смешать два списка вместе:

List<ReporterNewsletterMixer> mixed = new List<ReporterNewsletterMixer>(); 
reporters.Foreach(r => mixed.Add(new ReporterNewsletterMixer(r)); 
newsletter.Foreach(n => mixed.Add(new ReporterNewsletterMixer(n)); 
//bind to mixed 
0

В таком случае я хотел бы использовать Linq-To-объекты для объединения между двумя коллекциями и выбора только свойств, которые я хочу привязать к GridView (в результате получается анонимная коллекция). Затем эта анонимная коллекция может использоваться как источник данных GridView.

Вы можете увидеть большой пример того, как L2O соединение может быть сделано in this link
Как связать полученные данные в GridView - вы можете увидеть пример in this article

Смежные вопросы