Изменить тип сортировки в столбце Infragistics

У меня проблема с сортировкой в ​​столбце Infragistics.

У меня есть столбец с числами (длинный тип), но тип данных столбца — строка.

Итак, теперь он сортируется по строке, которая недействительна. Если я изменю тип данных столбца на typeof(long), сортировка перестанет работать.

Знаете ли вы, как изменить тип сортировки числовых значений?

Обновлено:

myCell.Column.DataType = typeof(string);

Я использую Infragistics4.Win.v12.2.


person mskuratowski    schedule 31.08.2017    source источник
comment
Это странно. Можете ли вы показать, как и когда вы меняете тип данных столбца? Расскажите, какую версию Infragistics Ultragrid вы используете?   -  person Steve    schedule 31.08.2017
comment
@ Стив, я обновил свой пост.   -  person mskuratowski    schedule 31.08.2017
comment
Но является ли этот столбец связанным столбцом?   -  person Steve    schedule 31.08.2017
comment
@ Стив, да, это связанный столбец.   -  person mskuratowski    schedule 31.08.2017


Ответы (1)


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

Предположим, у вас есть DataTable, загруженный таким образом.

DataTable dt = new DataTable();
sqlAdapter.Fill(dt);

Теперь вы можете добавить новый столбец длинного типа, используя выражение, которое копирует содержимое столбца String (я предполагаю, что каждая отдельная строка может быть преобразована в длинную)

dt.Columns.Add("NewLongCol", typeof(long), "StringCol");
yourGrid.DataSource = dt;

Наконец, в обработчике события InitializeLayout сетки скройте строковый столбец и поместите длинный столбец на его место.

private void yourGrid_InitializeLayout(object sender, InitializeLayoutEventArgs e)
{
    UltraGridBand b = e.Layout.Bands[0];
    int pos = b.Columns["StringCol"].Header.VisiblePosition;
    b.Columns["StringCol"].Hidden = true;
    b.Columns["NewLongCol"].Header.VisiblePosition = pos;
}
person Steve    schedule 31.08.2017