0

列の値を入力するための GridLookupEdit を持つ XtraGrid コントロールが必要です。

私がこれまでにできたこと:

1) XtraGrid コントロールを構成しました

columns: ID, Name, Number
in-place GridLookUp Editors for Name and Number columns

2) フォーム Load イベントで、データベースからデータをロードし、XtraGrid データソースと両方の repositoryItem(..) データソース、valuemember および displaymember を設定します。

a) データは XtraGrid にロードされます。セルをアクティブ化できますが、ドロップダウンから値を選択することはできません (repositoryItem(..) から)、または値を手動で入力することはできません (「*」新しい行でセルをアクティブ化できますが、同じ問題があります - できますドロップダウンから選択したり、値を手動で入力したりしないでください) => なぜですか?

b) XtraGrid のデータソースを設定しない場合、両方のドロップダウンがアクティブになり、GridLookupEdit を使用して値を選択できますが、セルを終了するとセルがクリアされます => この場合は xtraGrid.DataSource がないためだと思います設定されていますか?

        var model = (from TableA a in _dbE.TableA select new {ID, Name, Number}).ToList();

        //if i comment this line out, then i can choose values from GridLookUpEdit
        gridControl1.DataSource = model; 

        repositoryItemNosaukums.DataSource = model;
        repositoryItemNosaukums.ValueMember = "ID";
        repositoryItemNosaukums.DisplayMember = "Name";

        repositoryItemPieteikumaNr.DataSource = model;
        repositoryItemPieteikumaNr.ValueMember = "ID";
        repositoryItemPieteikumaNr.DisplayMember = "Number";

私は何が欠けていますか?

4

1 に答える 1

1

問題は、私のデータ ソースの「モデル」がリストであるということでしたが、プロパティ AllowNew==True および AllowEdit==True を持つ BindingList である必要がありました。

DevExpress サポートがデータ ソースが読み取り専用であるかどうかを尋ねた後、次の投稿を見つけて、ようやく目を覚ましました。

DataGridView の問題: datagridview はユーザーに対して読み取り専用のようです (WinForms)

コードの正しいバージョン

    //no projections (select new ...) for IBindingList<T>..
       //var model = (from TableA a in _dbE.TableA select new {ID, Name, Number}).ToList();
    var model = (from TableA a in _dbE.TableA).ToList(); 

    //convert to BindingList
    var bindingModel= new BindingList<TableA>(model);
    bindingModel.AllowNew=true;
    bindingModel.AllowEdit=true;

    //bind BindingList to datagrid
    gridControl1.DataSource = bindingModel; //model; 

    //... no changes to repositoryItem(..) stuff
    repositoryItemNosaukums.DataSource = model;
    repositoryItemNosaukums.ValueMember = "ID";
    repositoryItemNosaukums.DisplayMember = "Name";

    repositoryItemPieteikumaNr.DataSource = model;
    repositoryItemPieteikumaNr.ValueMember = "ID";
    repositoryItemPieteikumaNr.DisplayMember = "Number";
于 2013-03-17T21:49:49.537 に答える