Unbound GridControl - PullRequest
       27

Unbound GridControl

2 голосов
/ 27 февраля 2012

У меня есть gridControl, источником данных которого является список.Каждый элемент списка состоит из трех полей.И у меня есть 3 столбца в gridControl.когда я программно вставляю значения в сетку, он не появляетсяВот мой код.

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 ]

1 голос
/ 28 февраля 2012

Дело в том, что вы не должны работать с клетками напрямую.Ваш список «компаний» должен быть включен в BindingList.Все программные изменения выполняются на объекте, а не на уровне сетки.Таким образом, установка источника данных становится

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

Это позаботится о представлении, изменениях, добавлениях и удалениях объектов в списке.Столбцы будут созданы автоматически, если ваш gridView не содержит каких-либо и AutoPopulateColumns имеет значение true.Возможно, вы захотите настроить столбцы в gridView с помощью Designer.Не забудьте так установить для свойства Field значение Property name базового объекта.

1 голос
/ 27 февраля 2012

Вы правильно установили свойство источника данных, но вам также необходимо привязать источник данных к элементу управления с помощью метода DataBind, подобного этому

gridControl1.DataSource = companies;
gridControl1.DataBind();
1 голос
/ 27 февраля 2012

Я думаю, что вы можете написать метод DataBind

gridControl1.DataBind();

, поэтому ваш код будет

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

Метод GridView.DataBind : привязывает источник данныхв элемент управления GridView.

Используйте метод DataBind для привязки данных из источника данных к элементу управления GridView.Этот метод разрешает все выражения привязки данных в активном шаблоне элемента управления.

0 голосов
/ 28 февраля 2012

Я полагаю, что причина проблемы в том, что вы используете имена полей, такие как "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();
}
...