1

厳密に型指定されたデータテーブルに基づく LINQ 結果に DataGridView をバインドする際に問題が発生しています。DataTable への直接バインドは正常に機能します。作業例:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // TODO: This line of code loads data into the 'MYDSDataSet.MYTABLE' table. You can move, or remove it, as needed.
        this.MYTABLETableAdapter.Fill(this.MYDSDataSet.MYTABLE);

        this.dataGridView1.DataSource = this.MYDSDataSet.MYTABLE;
    }
}

次の行を使用しても機能しません。

        this.dataGridView1.DataSource = this.MYDSDataSet.MYTABLE.Select(x => x);

機能する/機能しないということは、最初の例では、データグリッドビューがデータテーブルのすべての列を自動生成し、すべての結果を表示することを意味します。2 番目の例では、エラーは発生しませんが、DataSource をまったく割り当てていないかのように、datagridview は完全に空のままになります。

このサイトや他のサイトで読んだことから、私がしていることに問題はないはずですが、とにかく正しい結果を得ることができません. 何か案は?役立つ情報がさらに必要な場合は、お知らせください。

Edit1: 追加の詳細。

次の行を試しましたが、すべて成功しませんでした:

this.dataGridView1.DataSource = this.MYDSDataSet.Tables["MYTABLE"].AsEnumerable().Select(x => x);
this.dataGridView1.DataSource = this.MYDSDataSet.MYTABLE.AsEnumerable().Select(x => x);
this.dataGridView1.DataSource = this.MYDSDataSet.MYTABLE.Select(x => x).ToList();
this.dataGridView1.DataSource = from x in this.MYDSDataSet.MYTABLE select x;

上記のすべての結果データ サブセットには、デバッグ時に適切なデータ/行数が含まれています。

厳密に型指定されたデータ テーブルは、Visual Studio 2010 データ ソース ウィザードによって提供されるものです。

4

1 に答える 1

0

以下を使用して記述します。

this.MYDSDataSet.MYTABLE.AsEnumerable().Select(x => x)

DataTable RowCollectionはIEnumerableを実装していないため、AsEnumerable()を使用して変換しない限り、IEnumerableに対してクエリを実行することはできません。

編集-他の回答のディスカッションにコメントを追加することはできません。

MYTABLE.Select(x => x)の使用は、VS2010では機能しません。次のエラーが返されます。デリゲート型ではないため、ラムダ式を型'string'に変換できません。Select()は、ラムダではなく文字列式を想定しています。

于 2012-07-25T19:56:39.467 に答える