.NET の DataSet に 2 つのテーブルがあります。ID列でそれらを結合したい。次に、DataGridView に最初のテーブルから 2 つの列を表示し、2 番目のテーブルから 1 つの列を表示します。
簡単に言えば、2 つのテーブルの関係は 1 対 1 です。
それはできますか?
.NET の DataSet に 2 つのテーブルがあります。ID列でそれらを結合したい。次に、DataGridView に最初のテーブルから 2 つの列を表示し、2 番目のテーブルから 1 つの列を表示します。
簡単に言えば、2 つのテーブルの関係は 1 対 1 です。
それはできますか?
えっ、読み取り専用ですか?.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<>
なぜデザイナーを使わないのですか?両方のテーブルをデータセットに配置し、リレーションシップを確立し、Fill/Get メソッドを次のように変更します (「内部結合」を使用)。
SELECT Productos.idProducto、Productos.Nombre、Precios.Precio、Tiendas.idTienda、Zonas.Zona、Productos.idZona FROM
Productos INNER JOIN Precios ON Productos.idProducto = Precios.idProducto