0

経由で Access からデータを取得する datagridview がありますOleDbDataReader

問題は次のとおりです。データをデータテーブルに読み込み、設定datasource = dt=>動作します

dt.Load(dr);

dt を取得して Linq を適用する => 空の GridView

GVMultiple.DataSource = (from myRow in dt.AsEnumerable()
                         where myRow.Field<string>("State") == "Succeeded"
                         select myRow)

=> を作成するLinq.ToList()と、私の列ではない「RowError」、「RowState」、「Table」、および「hasErrors」という名前の列が表示されます

GVMultiple.DataSource = (from myRow in dt.AsEnumerable()
                         where myRow.Field<string>("State") == "Succeeded"
                         select myRow).ToList()

ObjectカスタムList then設定へのデータの読み込みdatasource = List=> 空GridView

while (dr.Read())
{
    UserList.Add(new UserInfo()
    {
        ID = (int)dr["ID"],
        UserName = (string)dr["User Name"]
    });
}

GVMultiple.DataSource = UserList

誰かが私に何が起こっているのか教えてもらえますか?

4

3 に答える 3

1

GVMultiple.DataSource = (myRow から dt.AsEnumerable() where myRow.Field("State") == "Succeeded" select myRow)

Linq.ToList() => を作成すると、私の列ではない「RowError」、「RowState」、「Table」、および「hasErrors」という名前の列が表示されます

RowError"、"RowState"、"Table"、および "hasErrors" は、DataRow のプロパティです。これは、作成したリストにあるものです。

.CopyToDataTable() 拡張メソッドを調べてください。 http://msdn.microsoft.com/en-us/library/bb396189.aspx

    GVMultiple.DataSource = (from myRow in dt.AsEnumerable()
                     where myRow.Field<string>("State") == "Succeeded"
                     select myRow).CopyToDataTable();
于 2013-09-12T12:51:25.117 に答える
1

作業を行うDataBindingには、 を使用する必要がありますPropertiesFields対応していませんDataBinding

以下のようにクラスを変更して機能させます。

class UserInfo 
{ 
    public int ID {get;set;}  //convert fields to property
    public string UserName{get;set;}
} 
于 2013-09-12T12:38:49.270 に答える
0

その理由は、データ グリッド ビューが新しいデータのコレクションを表示用に受け入れられた形式として認識できないためです。

Linq クエリを使用してデータをフィルター処理し、データ グリッド ビューに再表示する場合は、常にクエリ結果をデータ ビューとしてデータ ソースに返す必要があります。

DataView はインデックスを構築します。これにより、フィルター処理や並べ替えなど、インデックスを使用できる操作のパフォーマンスが大幅に向上します。DataView のインデックスは、DataView が作成されたときと、並べ替えまたはフィルター処理の情報が変更されたときに作成されます。DataView を作成し、後で並べ替えまたはフィルター処理の情報を設定すると、インデックスが少なくとも 2 回作成されます。1 回目は DataView の作成時、もう 1 回は並べ替えまたはフィルター プロパティのいずれかが変更されたときです。

例えば:

DataTable dt = empData.loadEmployee();
BindingSource bs = new BindingSource();
bs.DataSource = dt.AsEnumerable()
    .Where(c => c.Field<string>("First Name").ToLower()
    .Contains(txtSearch.Text.ToLower())).AsDataView();

dgvEmpManag.DataSource = bs;

この例では、テキスト ボックス内の検索用語のようなファースト ネームを持つ従業員を探しています。txtSearchデータ グリッド ビューには、検索結果がフィルター処理されて表示されますAsDataView()

于 2016-06-24T17:57:45.647 に答える