2

我有一个gridControl,它的数据源是一个列表。List 中的每个项目都由三个字段组成。我在 gridControl 中有 3 列。当我以编程方式将值插入到 gridview 中时,它不会出现。这是我的代码。

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

我认为您可以编写 DataBind 方法

gridControl1.DataBind();

所以你的代码将是

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

GridView.DataBind 方法 :将数据源绑定到 GridView 控件。

使用 DataBind 方法将数据从数据源绑定到 GridView 控件。此方法解析控件的活动模板中的所有数据绑定表达式。

于 2012-02-27T14:47:16.467 回答
1

您正确设置了数据源属性,但您还必须使用这样的 DataBind 方法将数据源绑定到控件

gridControl1.DataSource = companies;
gridControl1.DataBind();
于 2012-02-27T14:50:24.720 回答
1

问题是你不应该直接使用细胞。您的“公司”列表应包含在 BindingList 中。所有编程更改都是在对象而不是网格级别完成的。所以,设置数据源变成

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

这将负责列表中对象的呈现、更改、添加和删除。如果您的 gridView 不包含任何列并且 AutoPopulateColumns 为 true,则将自动创建列。您可能希望使用 Designer 在 gridView 中设置列​​。不要忘记将 Field 属性设置为基础对象的属性名称。

于 2012-02-28T14:31:30.387 回答
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 方法就足够了:

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 回答