Соединение таблиц в .NET DataSet для отображения в DataGridView - PullRequest
2 голосов
/ 23 ноября 2008

У меня есть две таблицы в наборе данных в .NET. Я хочу присоединиться к ним в столбце ID. Затем я хочу, чтобы DataGridView отображал два столбца из первой таблицы и один столбец из второй таблицы.

Если это облегчает, отношение между двумя таблицами будет взаимно однозначным.

Можно ли это сделать?

Ответы [ 2 ]

4 голосов
/ 23 ноября 2008

Ну, это только для чтения? В .NET 3.5 / C # 3.0 вы, вероятно, могли бы довольно легко использовать соединение LINQ и анонимный тип вывода:

        DataTable left = new DataTable
        {
            Columns = { {"PK", typeof(int)}, {"Name", typeof(string)}},
            Rows = {{1,"abc"},{2,"def"}}
        }, right = new DataTable
        {
            Columns = { { "FK", typeof(int) }, { "Value", typeof(decimal) } },
            Rows = { { 1, 123.45M }, { 2, 678.9M } }
        };
        var qry = from x in left.Rows.Cast<DataRow>()
                  join y in right.Rows.Cast<DataRow>()
                  on x.Field<int>("PK") equals y.Field<int>("FK")
                  select new
                  {
                      Name = x.Field<string>("Name"),
                      Value = y.Field<decimal>("Value")
                  };
        var data = qry.ToList();

Затем вы можете привязать «Имя» и «Значение» данных. Обратите внимание, что это проще с типизированными наборами данных, поскольку вы можете потерять мусор Cast<> и Field<>.

0 голосов
/ 07 августа 2009

Почему бы не использовать дизайнер? Вы помещаете обе таблицы в набор данных, устанавливаете связь и меняете методы Fill / Get на что-то вроде этого (с «внутренним объединением»):

ВЫБРАТЬ Productos.idProducto, Productos.Nombre, Precios.Precio, Tiendas.idTienda, Zonas.Zona, Productos.idZona ОТ
Productos INNER JOIN Precios ON Productos.idProducto = Precios.idProducto

...