WinForm DataGridView
От: kov_serg Россия  
Дата: 03.12.18 22:42
Оценка:
Никто не помнит накой хрен в DataGridView есть такая модная фича как DataTable.ParseSortString?
И где этот функционал описан в MSDN?

// test.cs
// @%windir%\Microsoft.NET\Framework\v3.5\csc.exe /nologo test.cs && test || pause

using System;
using System.Windows.Forms;
using System.Data;

static class Program {
    class TestForm : Form {
        DataGridView view = new DataGridView();
        public TestForm() {
            view.Dock = DockStyle.Fill;
            var data = new DataTable();
            data.Columns.Add("no problem");
            var name="problem,here";
            #if false // fast and dirty workaround
            name=name.Replace(',','\u201A');
            #endif
            data.Columns.Add(name); 
            data.Rows.Add("1","2");
            data.Rows.Add("3","4");
            view.DataSource = data;
            Controls.Add(view);
        }
    }        
    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new TestForm());
    }
}

Если нажать на заголовок второго стобца програма завершиться со страшными воплями.

ps: Другой вариант использовть data.Columns.Add(new DataColumn() { Caption = "итого, руб" }); и потом в load приколхозить foreach (DataGridViewColumn col in view.Columns) col.HeaderText = data.Columns[col.HeaderText].Caption;. Но вопрос не в этом. Вопрос накой наложили таких мин?
Re: WinForm DataGridView
От: amironov79  
Дата: 04.12.18 09:02
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Никто не помнит накой хрен в DataGridView есть такая модная фича как DataTable.ParseSortString?

_>И где этот функционал описан в MSDN?

Если разбираться, то DataGridView зовет только IBindingList.ApplySort, всю же черную (во всех смыслах) работу делают DataView и DataTable. Поэтому либо вариант с Caption и HeaderText, либо отказываться от использования DataTable.
Re[2]: WinForm DataGridView
От: kov_serg Россия  
Дата: 04.12.18 11:49
Оценка:
Здравствуйте, amironov79, Вы писали:

A>Если разбираться, то DataGridView зовет только IBindingList.ApplySort, всю же черную (во всех смыслах) работу делают DataView и DataTable. Поэтому либо вариант с Caption и HeaderText, либо отказываться от использования DataTable.


Я уже поправил места где всплывал этот косяк. Но остаётся вопрос где этот скрытый функционал описан, и какая такая жесткая необходимость в нём есть?
Re[3]: WinForm DataGridView
От: alexander_r  
Дата: 04.12.18 11:59
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, amironov79, Вы писали:


A>>Если разбираться, то DataGridView зовет только IBindingList.ApplySort, всю же черную (во всех смыслах) работу делают DataView и DataTable. Поэтому либо вариант с Caption и HeaderText, либо отказываться от использования DataTable.


_>Я уже поправил места где всплывал этот косяк. Но остаётся вопрос где этот скрытый функционал описан, и какая такая жесткая необходимость в нём есть?


DataView.Sort
Re[4]: WinForm DataGridView
От: kov_serg Россия  
Дата: 04.12.18 14:55
Оценка:
Здравствуйте, alexander_r, Вы писали:

_>>Я уже поправил места где всплывал этот косяк. Но остаётся вопрос где этот скрытый функционал описан, и какая такая жесткая необходимость в нём есть?


_>DataView.Sort

Здорово,не где написано что это к названиям столбцов относиться?
Re[5]: WinForm DataGridView
От: alexander_r  
Дата: 04.12.18 15:58
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, alexander_r, Вы писали:


_>>>Я уже поправил места где всплывал этот косяк. Но остаётся вопрос где этот скрытый функционал описан, и какая такая жесткая необходимость в нём есть?


_>>DataView.Sort

_>Здорово,не где написано что это к названиям столбцов относиться?

Строка, содержащая имя столбца, за которым следует "ASC" (по возрастанию) или "DESC" (по убыванию). Столбцы сортируются по возрастанию по умолчанию. Несколько столбцов могут быть разделены запятыми.

т.е запятая в названии столбца интерпретируется как разделитель
если заменить запятую в названии столбца, то сортировка работает, если нет — IndexOutOfRangeException

            var v = new DataView(data);
            v.Sort = data.Columns[0] + " DESC," + data.Columns[1] + " ASC"; 

            view.DataSource = v;


_>Другой вариант использовть data.Columns.Add(new DataColumn() { Caption = "итого, руб" })...

Заголовки столбцов можно сразу в DataGridView задать, когда все данные получены...
Отредактировано 04.12.2018 16:26 alexander_r . Предыдущая версия .
Re[6]: WinForm DataGridView
От: kov_serg Россия  
Дата: 04.12.18 17:37
Оценка:
Здравствуйте, alexander_r, Вы писали:

__>т.е запятая в названии столбца интерпретируется как разделитель

_>если заменить запятую в названии столбца, то сортировка работает, если нет — IndexOutOfRangeException
Я про то что компонент суёт название столбца в поле Sort не задумываясь о том функционале который там заложен.
Мягко говоря дурацкая реализация. И реакция на исключение в данном случае просто радует.
Не стоит доказывать что это фича, а не баг. Плюс в документации нет предупрежнения крупными буквами: Осторожно мины!

_>>Другой вариант использовть data.Columns.Add(new DataColumn() { Caption = "итого, руб" })...

_>Заголовки столбцов можно сразу в DataGridView задать, когда все данные получены...
Смысл в том что это грабля вплывает только когда на неё наступишь, а до того момента мирно дремлит.
Re[3]: WinForm DataGridView
От: amironov79  
Дата: 05.12.18 06:10
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Я уже поправил места где всплывал этот косяк. Но остаётся вопрос где этот скрытый функционал описан, и какая такая жесткая необходимость в нём есть?


Думаю, что нигде, можно только догадаться: раз DataView умеет сортировать по выражению, то и имя столбца он воспринимает как выражение.
Re[7]: WinForm DataGridView
От: amironov79  
Дата: 05.12.18 06:34
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Я про то что компонент суёт название столбца в поле Sort не задумываясь о том функционале который там заложен.

_>Мягко говоря дурацкая реализация. И реакция на исключение в данном случае просто радует.
_>Не стоит доказывать что это фича, а не баг. Плюс в документации нет предупрежнения крупными буквами: Осторожно мины!

А что grid может сделать? Он через стандартный интерфейс попросил отсортировать данные по имени столбца, а ему в ответ исключение. У любого другого контрола были бы теже проблемы.

_>>Заголовки столбцов можно сразу в DataGridView задать, когда все данные получены...

_>Смысл в том что это грабля вплывает только когда на неё наступишь, а до того момента мирно дремлит.

Не такая уж это проблема, надо просто понимать, что ColumnName -- это идентификатор столбца, и именовать его соответствующим образом.
Re[7]: WinForm DataGridView
От: Osaka  
Дата: 06.12.18 22:22
Оценка:
_>Я про то что компонент суёт название столбца в поле Sort не задумываясь о том функционале который там заложен.
_>Мягко говоря дурацкая реализация. И реакция на исключение в данном случае просто радует.
_>Не стоит доказывать что это фича, а не баг. Плюс в документации нет предупрежнения крупными буквами: Осторожно мины!
Совершенно ожидаемое поведение. Имя подчиняется тем же правилам, что и идентификатор в коде. "';drop database" ещё колумн назови.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.