Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
1 / 1 / 4
Регистрация: 14.07.2013
Сообщений: 19
1

Задать порядок столбцов DataGrid при привязке коллекции

07.11.2014, 00:34. Показов 2696. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени!

Работаю с VS Express 2013.
Проект на Silverlight + WCF.

Прошу помощи вот в чем.
Есть DataGrid, которая связана с коллекцией. Дополнительно в ней создан TemplateColumn с кнопками.

XML
1
2
3
4
5
6
7
8
9
10
11
12
 
<sdk:DataGrid x:Name="RssDataGrid">
            <sdk:DataGrid.Columns>               
                <sdk:DataGridTemplateColumn Width="Auto" DisplayIndex="4" CanUserResize="False">
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="delete" Click="Delete_SingleItem_Click"/>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
            </sdk:DataGrid.Columns>
        </sdk:DataGrid>
Binding через ItemsSource:
C#
1
RssDataGrid.ItemsSource = source; //source - тип ObservableCollection<T>.Полей 5,соответственно колонок генерит тоже 5.
По умолчанию колонки подгружаются из полей типа Т в алфавитном порядке (по имени поля).
Мне нужно вручную задать порядок отображения колонок в гриде,а некоторые скрыть.

Также необходимо. чтобы темплейтная колонка с кнопками отображалась последней (по умолчанию она оказывается первой).
Пробовал такой вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
foreach (DataGridColumn col in RssDataGrid.Columns)
            {
                switch ((string)col.Header)
                {
                    
                    case "Name": col.DisplayIndex = 0; break;
                    case "Title": col.DisplayIndex = 1; break;
                    case "Description": col.DisplayIndex = 2; break;
                    case "URL": col.DisplayIndex = 3; break;
                }  
            }
Но это работает только с явно описанными столбцами.

Заранее благодарю за помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2014, 00:34
Ответы с готовыми решениями:

Дублирование столбцов DataGrid при привязке, LINQtoSQL
Доброго времени суток. Помогите с решением проблемы. Вывожу данные в datagrid. &lt;DataGrid...

DataGrid - задать текст для заголовков столбцов
Привет ребята! подскажите как сделать так, чтобы в заголовке столбца где идет нумерация строк,...

Как задать формат строки для автогенерируемых столбцов в DataGrid?
в предложенном варианте, почему-то не работает формат для TimeSpan: dataGrid.AutoGeneratingColumn...

Принудительная синхронизация коллекции и DataGrid в момент редактирования ячейки, а не при потере фокуса строки
Есть dg, элементы которого прибиндины к элементам коллекции. Если редактировать ячейку dg, то...

2
1 / 1 / 4
Регистрация: 14.07.2013
Сообщений: 19
07.11.2014, 16:12  [ТС] 2
С одной частью разобрался.

В классе DataGrid есть ивент AutoGeneratingColumn.
Чтобы получить доступ к колонкам, создаваемым привязкой, необходимо подписаться на это событие своим обработчиком:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<sdk:DataGrid x:Name="RssDataGrid" 
                      AutoGeneratingColumn="RssDataGrid_AutoGeneratingColumn"> <!-- подписка на автосоздание колонок-->
            <sdk:DataGrid.Columns>
                <sdk:DataGridTemplateColumn Width="Auto">
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="delete" HorizontalAlignment="Center" VerticalAlignment="Center" Click="Delete_SingleItem_Click"/>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
                
            </sdk:DataGrid.Columns>
        </sdk:DataGrid>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
       //собственно обработчик события AutoGeneratingColumn
        private void RssDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            //в переменной е содержится поле Column - это и будет колонка, создаваемая из биндинга.
            switch ((string)e.Column.Header)
            {
                case "ID": e.Column.Visibility = System.Windows.Visibility.Collapsed; break;   //"не показывать" эту колонку в гриде
                case "URL": e.Column.DisplayIndex = 3; break;           //
                case "Name": e.Column.DisplayIndex = 0; break;          //задаю порядок отображения колонок
                case "Title": e.Column.DisplayIndex = 1; break;         //
                case "description": e.Column.DisplayIndex = 2; break;   //
            }
        }
На дебаге колонки идут не по алфавиту, но и не в порядке, что я указал (на картинке)

И моя темплейтная колонка с кнопками оказалась вообще посередине.

Буду рад свежему взгляду.
Миниатюры
Задать порядок столбцов DataGrid при привязке коллекции  
0
164 / 144 / 49
Регистрация: 29.10.2014
Сообщений: 738
24.05.2015, 13:05 3
Попробуйте в xaml коде расположить колонки, как Вам надо.
0
24.05.2015, 13:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2015, 13:05
Помогаю со студенческими работами здесь

WPF DataGrid, при смене типа выделения перестает отслеживать изменение коллекции или делает это некорректно
Всем добра! Пытаюсь разобраться с одним моментом. Коротко о проекте: Форма в которую закинут...

LINQ при привязке List<string[]> к DataGrid.DataContext через IBindingList
Приветствую сообщество. Что неправильно в выражении LINQ, приведенном ниже ? Дебаггер...

Меняется порядок столбцов при выборке всех и трех столбцов из БД
Вывожу таблицу с помощью DataGrid и DataSet. Делаю выборку всех столбцов из таблицы , затем делаю...

Изменение ширины столбцов DataGrid не за заголовок, а за разделитель столбцов
Господа, подскажите пожалуйста как реализовать изменение ширины произвольного столбца DataGrid,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru