Изменение вида ячейки DataGrid

189
27 февраля 2019, 23:00

Вытягиваю данные в DataGrid получается так:

Как видно, 2й и 3й столбцы типа DataTime. Вопрос: как вместо такого (текстового) отображения поставить datePicker (т е получается нужно определить отображения для столбца определенного типа, т к есть несколько перегрузок данного класса, и кол-во столбцов может меняться как и их тип.

Answer 1

Если надо что то нестандартное, то вы можете использовать DataGridTemplateColumn.
Давайте попробуем сделать то, что вы хотите:

  1. Создаем DataGrid, привязываем его и убираем автоматическую генерацию столбцов:

    <DataGrid ItemsSource="{Binding TestData}" AutoGenerateColumns="False"/>
  2. Добавим колонку к примеру с именем элемента. Для этого мы внутри элемента обозначаем DataGrid.Columns c DataGridTextColumn элементом:

    <DataGrid.Columns>
        <DataGridTextColumn Header="Имя" Binding="{Binding Name}"/>
    </DataGrid.Columns>
  3. Теперь создадим столбец с датой. Задача у нас, это добавить туда элемент DatePicker. Элемент не стандартный, значит берем DataGridTemplateColumn. У него есть два интересных для нас свойства CellTemplate и CellEditingTemplate. Первый отвечает за вид самой ячейки, а второй за вид ячейки при изменении. По сути это обычные шаблоны в которых мы можем реализовать DataTemplate со своим элементом. Для примера сделаем что бы обычный вид был в виде текста, а при изменении использовался DatePicker:

    <DataGridTemplateColumn Header="Дата" >
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Date, StringFormat=d}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
        <DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
                <DatePicker SelectedDate="{Binding Date}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>
    </DataGridTemplateColumn>

Теперь запускаем и смотрим результат:

READ ALSO
c# OCR OpenCV как изменить PageSetMode?

c# OCR OpenCV как изменить PageSetMode?

По умолчанию psm = singleblock

208
Отправка Json из c# на PHP-сайт методом POST

Отправка Json из c# на PHP-сайт методом POST

Помогите пожалуйста со следующим вопросом:

170
Индекс находится вне границ массива C#

Индекс находится вне границ массива C#

помогите, пожалуйста, решить проблемуВозникает в этом месте

175
Не работает Shown в C#

Не работает Shown в C#

Работаю сейчас в формах C#У меня есть две формы

152