Никто не помнит накой хрен в DataGridView есть такая модная фича как DataTable.ParseSortString?
И где этот функционал описан в MSDN?
// test.cs
// @%windir%\Microsoft.NET\Framework\v3.5\csc.exe /nologo test.cs && test || pauseusing 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;. Но вопрос не в этом. Вопрос накой наложили таких мин?
Здравствуйте, kov_serg, Вы писали:
_>Никто не помнит накой хрен в DataGridView есть такая модная фича как DataTable.ParseSortString? _>И где этот функционал описан в MSDN?
Если разбираться, то DataGridView зовет только IBindingList.ApplySort, всю же черную (во всех смыслах) работу делают DataView и DataTable. Поэтому либо вариант с Caption и HeaderText, либо отказываться от использования DataTable.
Здравствуйте, amironov79, Вы писали:
A>Если разбираться, то DataGridView зовет только IBindingList.ApplySort, всю же черную (во всех смыслах) работу делают DataView и DataTable. Поэтому либо вариант с Caption и HeaderText, либо отказываться от использования DataTable.
Я уже поправил места где всплывал этот косяк. Но остаётся вопрос где этот скрытый функционал описан, и какая такая жесткая необходимость в нём есть?
Здравствуйте, kov_serg, Вы писали:
_>Здравствуйте, amironov79, Вы писали:
A>>Если разбираться, то DataGridView зовет только IBindingList.ApplySort, всю же черную (во всех смыслах) работу делают DataView и DataTable. Поэтому либо вариант с Caption и HeaderText, либо отказываться от использования DataTable.
_>Я уже поправил места где всплывал этот косяк. Но остаётся вопрос где этот скрытый функционал описан, и какая такая жесткая необходимость в нём есть?
Здравствуйте, alexander_r, Вы писали:
_>>Я уже поправил места где всплывал этот косяк. Но остаётся вопрос где этот скрытый функционал описан, и какая такая жесткая необходимость в нём есть?
_>DataView.Sort
Здорово,не где написано что это к названиям столбцов относиться?
Здравствуйте, 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 задать, когда все данные получены...
Здравствуйте, alexander_r, Вы писали:
__>т.е запятая в названии столбца интерпретируется как разделитель _>если заменить запятую в названии столбца, то сортировка работает, если нет — IndexOutOfRangeException
Я про то что компонент суёт название столбца в поле Sort не задумываясь о том функционале который там заложен.
Мягко говоря дурацкая реализация. И реакция на исключение в данном случае просто радует.
Не стоит доказывать что это фича, а не баг. Плюс в документации нет предупрежнения крупными буквами: Осторожно мины!
_>>Другой вариант использовть data.Columns.Add(new DataColumn() { Caption = "итого, руб" })... _>Заголовки столбцов можно сразу в DataGridView задать, когда все данные получены...
Смысл в том что это грабля вплывает только когда на неё наступишь, а до того момента мирно дремлит.
Здравствуйте, kov_serg, Вы писали:
_>Я уже поправил места где всплывал этот косяк. Но остаётся вопрос где этот скрытый функционал описан, и какая такая жесткая необходимость в нём есть?
Думаю, что нигде, можно только догадаться: раз DataView умеет сортировать по выражению, то и имя столбца он воспринимает как выражение.
Здравствуйте, kov_serg, Вы писали:
_>Я про то что компонент суёт название столбца в поле Sort не задумываясь о том функционале который там заложен. _>Мягко говоря дурацкая реализация. И реакция на исключение в данном случае просто радует. _>Не стоит доказывать что это фича, а не баг. Плюс в документации нет предупрежнения крупными буквами: Осторожно мины!
А что grid может сделать? Он через стандартный интерфейс попросил отсортировать данные по имени столбца, а ему в ответ исключение. У любого другого контрола были бы теже проблемы.
_>>Заголовки столбцов можно сразу в DataGridView задать, когда все данные получены... _>Смысл в том что это грабля вплывает только когда на неё наступишь, а до того момента мирно дремлит.
Не такая уж это проблема, надо просто понимать, что ColumnName -- это идентификатор столбца, и именовать его соответствующим образом.
_>Я про то что компонент суёт название столбца в поле Sort не задумываясь о том функционале который там заложен. _>Мягко говоря дурацкая реализация. И реакция на исключение в данном случае просто радует. _>Не стоит доказывать что это фича, а не баг. Плюс в документации нет предупрежнения крупными буквами: Осторожно мины!
Совершенно ожидаемое поведение. Имя подчиняется тем же правилам, что и идентификатор в коде. "';drop database" ещё колумн назови.