Как связать gridview с двумя разными списками? - PullRequest
0 голосов
/ 27 марта 2012

У меня есть два списка разных типов

List<Report>
List<Newsletter>

Есть ли способ связать вид сетки с обоими списками? Оба класса не реализованы из общего интерфейса.

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

Ответы [ 4 ]

1 голос
/ 27 марта 2012

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

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();
0 голосов
/ 27 марта 2012

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

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

0 голосов
/ 27 марта 2012

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

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 голосов
/ 27 марта 2012

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

grv.DataSource = l1.Cast<object>().Union(l2.Cast<object>());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...