2

データ ソースがリストである gridControl があります。List の各項目は、3 つのフィールドで構成されています。そして、gridControl に 3 つの列があります。プログラムでグリッドビューに値を挿入すると、表示されません。これが私のコードです。

public Company_Selection()
{
    InitializeComponent();
    companies = new List<DataLibrary.Companies>();
    gridControl1.DataSource = companies;
}

internal void load_all_companies(List<DataLibrary.Companies> other)
{
    for (int i = 0; i < other.Count; i++)
    {
        companies.Add(other[i]);
        gridView1.SetRowCellValue( i, "Id", other[i].id);
        gridView1.SetRowCellValue( i, "Company", other[i].name);
        gridView1.SetRowCellValue(i, "Description", other[i].description);
        gridView1.RefreshData();
        gridControl1.RefreshDataSource();
    }
}

何が間違っているかについてのアイデアはありますか?

4

4 に答える 4

1

重要なのは、セルを直接操作するべきではないということです。「会社」リストはBindingListで囲む必要があります。プログラムによる変更はすべて、グリッドレベルではなく、オブジェクトで行われます。したがって、データソースの設定は次のようになります

gridControl1.DataSource = new BindingList<DataLibrary.Companies>(companies);

これにより、リスト内のオブジェクトの表示、変更、追加、および削除が処理されます。gridViewに列が含まれておらず、AutoPopulateColumnsがtrueの場合、列は自動的に作成されます。Designerを使用してgridViewで列を設定することをお勧めします。そのため、Fieldプロパティを基になるオブジェクトのプロパティ名に設定することを忘れないでください。

于 2012-02-28T14:31:30.387 に答える
1

DataBind メソッドを書いてもらえると思います

gridControl1.DataBind();

だからあなたのコードは

companies = new List<DataLibrary.Companies>();     
gridControl1.DataSource = companies;
 gridControl1.DataBind();

GridView.DataBind Method : データ ソースを GridView コントロールにバインドします。

DataBind メソッドを使用して、データ ソースから GridView コントロールにデータをバインドします。このメソッドは、コントロールのアクティブなテンプレート内のすべてのデータ バインディング式を解決します。

于 2012-02-27T14:47:16.467 に答える
1

データソース プロパティを正しく設定しますが、次のように DataBind メソッドを使用して、データソースをコントロールにバインドする必要もあります。

gridControl1.DataSource = companies;
gridControl1.DataBind();
于 2012-02-27T14:50:24.720 に答える
0

この問題の原因は、「Id」、「Company」、「Description」などのフィールド名を使用しているが、グリッドが「id」、「name」、「description」フィールド名にマッピングされていることだと思います。

gridView1.SetRowCellValue( i, "Id", other[i].id);
gridView1.SetRowCellValue( i, "Company", other[i].name);
gridView1.SetRowCellValue(i, "Description", other[i].description);

また、行セルの値をビューに直接渡し、すべてのレコードを追加した後にグリッドを更新することは非常に冗長です。データの読み込み後に RefreshDataSource メソッドを 1 回呼び出すだけで十分です。

internal void load_all_companies(List<DataLibrary.Companies> other) {
    for(int i = 0; i < other.Count; i++) 
        companies.Add(other[i]);
    gridControl1.RefreshDataSource();
}
于 2012-02-28T13:04:07.443 に答える