1

私は、dataTable にインポートされた 2 つの csv ファイルを入力として受け取るプロジェクトに取り組んできました。ここで、これら 2 つを結合し、結合したものを dataGridView に表示したいと考えました。

プログラムはインポート部分まで正常に動作しています。

これまでに作成したコードはエラーを表示していませんが、機能していません。つまり、目的のデータ グリッド ビューが空白のままです。

次のコードを観察し、機能する解決策を提供してください。よろしくお願いします。

PS: ここで完全外部結合を実行しようとしています。

var tbl1 = tb1;
var tbl2 = tb2;
var res1 = from t2 in tbl2.AsEnumerable()
           join t1 in tbl1.AsEnumerable() on t2["BBL"] equals t1["BBL"] into g
           from t1 in g.DefaultIfEmpty()
           where t1 == null
           select t2;

dataGridView3.DataSource = res1;
4

2 に答える 2

0

ここでの問題res1は、のコレクションでDataRowあり、そのインデックス付けされていないプロパティが列としてレンダリングされていることです。

解決策 1

行の内容をプロパティとして持つ匿名タイプのオブジェクトを選択できます。

例えば、

var tbl1 = tb1;
var tbl2 = tb2;
var res1 = from t2 in tbl2.AsEnumerable()
           join t1 in tbl1.AsEnumerable() on t2["BBL"] equals t1["BBL"] into g
           from t1 in g.DefaultIfEmpty()
           where t1 == null
           select new { Amount = t2["amount"], Payee = t2["payee"] };

ここでamount、 とpayeeは の 2 つの列ですtb2

に設定AutoGenerateColumnsするdataGridView3true、この匿名クラスのプロパティの名前 (つまりAmountPayee) が列名として使用されます。

解決策 2

あなたのコメントのように、すべての列を表示したいと言ったので、ここに別のあまり洗練されていない解決策があります (Linq 式をそのままにしておいてください)。

foreach (DataColumn dCol in tbl1.Columns)
{
    dataGridView1.Columns.Add(dCol.ColumnName, dCol.Caption);
}

foreach (var s in res1)
{
    foreach (var item in res1)
    {
        dataGridView1.Rows.Add(item.ItemArray);
    }
}

dataGridView3.DataSource = res1;このアプローチを進める場合は、を削除する必要があります。

于 2012-05-30T15:59:02.310 に答える
0

列を作成するか、res1 のスキーマをコピーする必要があります。

例:

res1.columns.Add("RowError",typeof(string));
于 2012-05-30T15:41:29.447 に答える