未绑定的GridControl

时间:2012-02-27 14:45:04

标签: c# devexpress gridcontrol

我有一个gridControl,他的数据源是List。 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 个答案:

答案 0 :(得分:1)

我认为你可以编写DataBind方法

gridControl1.DataBind();

所以你的代码将是

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

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

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

答案 1 :(得分:1)

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

gridControl1.DataSource = companies;
gridControl1.DataBind();

答案 2 :(得分:1)

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

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

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

答案 3 :(得分: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();
}