XtraGrid жестко закодировать одно из значений столбца и использовать автофильтр - PullRequest
1 голос
/ 13 декабря 2011

У меня есть сетка, которая связана с набором данных, который заполняется из хранимой процедуры. Один из столбцов набора данных (InstrumentName) не взят из хранимой процедуры, но он пуст.

Я хочу установить значения в каждой строке этого столбца, в зависимости от значения другого столбца (Id). У меня есть список имен и идентификаторов, и я хочу жестко указать имя из своего списка.

Когда я делаю это в методе Initialized (), я вижу в отладке, что значения установлены, но их нет в сетке. Похоже, что сетка перекрашена и мои заданные значения потеряны ..

У меня этот цикл работает в Initialized ():

for (int i = 0; i < view.DataRowCount; i++)
{
    object Uic = view.GetRowCellValue(i, view.Columns["Uic"]);
    int UicInt = 0;

    if ((Uic != null) && (int.TryParse(Uic.ToString(), out UicInt)))
         view.SetRowCellValue(i, view.Columns["InstrumentName"], GetName(UicInt));
 }

Я также пытался сделать это (без зацикливания) в DataMonitorGridViewCustomColumnDisplayText () без успеха ..

В конце мне нужно иметь возможность использовать AutoFilterRow для новых значений. До сих пор все было возможно, но не автофильтрация ...

1 Ответ

2 голосов
/ 13 декабря 2011

Я бы рекомендовал заполнить коллекцию из хранимой процедуры. Затем вы можете использовать эту коллекцию в качестве источника данных для сетки. Создайте класс со всеми соответствующими свойствами, включая InstrumentName, которому вы будете присваивать значения из вашей собственной коллекции в памяти.

Обновление
Основываясь на комментариях ниже - я считаю, что вы можете использовать событие DataRow.RowChanged для запуска при добавлении строки. Затем возьмите нужный «Идентификатор» и отправьте запрос в свою коллекцию в памяти.

Я бы все равно вернулся к своей первоначальной рекомендации. Поскольку DataTables имеют свободную типизацию, класс со строгой типизацией будет гораздо более гибким и обеспечит целостность данных. Если в вашей DataTable есть столбцы Foo (datatype: int), Bar (datatype: string) и Baz (datatype: string), то создайте класс, имитирующий эту структуру:

public class FooBarBazEntity{
    public int Foo { get; set; }
    public string Bar { get; set; }
    public string Baz { get; set; }
}

Вы можете легко заполнить коллекцию - IList<T> или IEnumerable<T> - с помощью LINQ.

...