Добавить столбец действий в динамически сгенерированном DataGrid - PullRequest
0 голосов
/ 31 августа 2018

Я динамически генерирую элемент управления DataGrid с помощью этого кода:

//c# code
DataGrid dg = new DataGrid();
dg.HorizontalAlignment = HorizontalAlignment.Center;
dg.VerticalAlignment = VerticalAlignment.Top;
dg.AutoGenerateColumns = true;
getData gd = new getData();
UserData[] userData = gd.getUserRecord();
dg.ItemsSource = userData;

panel1.Children.Add(dg);

//XAML code
<StackPanel Name="panel1"  ScrollViewer.VerticalScrollBarVisibility="Visible" Margin="18.971,24,24,0" Grid.Column="1">

Теперь я хочу добавить дополнительный столбец с именем «Действие» в эту сетку данных, и в каждой строке должна быть кнопка удаления и редактирования. Я искал в интернете, но получил только результат для динамического генерирования только столбца действия, тогда как для динамического создания мне нужен весь элемент управления.

PS: UserData - это мой пользовательский класс getter / setter, и у getData есть методы для получения данных из базы данных.

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете создать DataGridTemplateColumn с CellTemplate:

DataGrid dg = new DataGrid();
dg.HorizontalAlignment = HorizontalAlignment.Center;
dg.VerticalAlignment = VerticalAlignment.Top;
dg.AutoGenerateColumns = true;
getData gd = new getData();
UserData[] userData = gd.getUserRecord();
dg.ItemsSource = userData;

FrameworkElementFactory sp = new FrameworkElementFactory(typeof(StackPanel));
sp.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
FrameworkElementFactory delete = new FrameworkElementFactory(typeof(Button));
delete.AddHandler(Button.ClickEvent, new RoutedEventHandler((s, e) => { MessageBox.Show("deleted click!"); }));
delete.SetValue(ContentControl.ContentProperty, "Delete");
FrameworkElementFactory edit = new FrameworkElementFactory(typeof(System.Windows.Controls.Button));
edit.AddHandler(Button.ClickEvent, new RoutedEventHandler((s, e) => { MessageBox.Show("edited click!"); }));
edit.SetValue(ContentControl.ContentProperty, "Edit");
edit.SetValue(FrameworkElement.MarginProperty, new Thickness(5, 0, 0, 0));
sp.AppendChild(delete);
sp.AppendChild(edit);

DataGridTemplateColumn dataGridTemplateColumn = new DataGridTemplateColumn()
{
    Header = "new...",
    CellTemplate = new DataTemplate { VisualTree = sp }
};

dg.Columns.Add(dataGridTemplateColumn);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...