wpf DataGrid Добавление строки.
-
2 мая 2012 г. 17:41
есть DataGrid в котором заранее неизвестно количество столбцов.
Как добавить туда строки?
Все ответы
-
3 мая 2012 г. 5:18Отвечающий
Создать коллекцию, в которой будут содержаться элементы с полями, которые вы хотите показывать. Добавлять элементы в коллекцию, они автоматически (если коллекция типа ObservableCollection) будут показываться в DataGrid. Например, у вас есть вот такой Grid:
<Grid> <Grid.RowDefinitions> <RowDefinition Height="30" /> <RowDefinition Height="1*" /> </Grid.RowDefinitions> <Button Content="Добавить строку" Click="Button_Click_1" /> <DataGrid x:Name="dgMain" AutoGenerateColumns="False" Grid.Row="1"> <DataGrid.Columns> <DataGridTextColumn Header="Первый столбец" Binding="{Binding First}" /> <DataGridTextColumn Header="Второй столбец" Binding="{Binding Second}" /> </DataGrid.Columns> </DataGrid> </Grid>Добавляете в проект вот такой класс:
class MyClass { public string First { get; set; } public string Second { get; set; } }В класс окна, на котором расположен Grid, добавляете вот такое свойство и код в обработчик клика на кнопке:
ObservableCollection<MyClass> collection = null; private void Button_Click_1(object sender, RoutedEventArgs e) { if (collection == null) { collection = new ObservableCollection<MyClass>(); dgMain.ItemsSource = collection; } collection.Add( new MyClass() { First = "aaa", Second = "bbb" } ); }Все, при нажатии на кнопку в DataGrid будет добавляться новая строка.
- Предложено в качестве ответа Abolmasov DmitryMicrosoft Community Contributor 4 мая 2012 г. 9:45
- Отменено предложение в качестве ответа NIKkakNIK 6 мая 2012 г. 11:24
-
4 мая 2012 г. 9:45
Также посмотрите обсуждение о том как программно добавлять строки и стобцы в DataGrid
Для связи [mail]
- Помечено в качестве ответа NIKkakNIK 6 мая 2012 г. 11:24
-
6 мая 2012 г. 11:30
Abolmasov Dmitry спасибо за ссылку, очень помогла
пример как добавлять динамически колонки и строки туда
не забудьте добавить using System.Data;
<Grid> <DataGrid AutoGenerateColumns="False" Height="200" Margin="12,12,12,0" Name="dataGrid1" VerticalAlignment="Top" ItemsSource="{Binding}" /> <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="332,257,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" /> </Grid>
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } DataTable myTable = new DataTable(); private void Window_Loaded(object sender, RoutedEventArgs e) { myTable.Columns.Add("n1"); myTable.Columns.Add("n2"); foreach(DataColumn col in myTable.Columns) { dataGrid1.Columns.Add( new DataGridTextColumn() { Header=col.ColumnName, Binding= new Binding(String.Format("[{0}]", col.ColumnName)) }); } dataGrid1.DataContext = myTable; } private void button1_Click(object sender, RoutedEventArgs e) { DataRow row = myTable.NewRow(); myTable.Rows.Add(new string[] {"2","22" }); } }
-
5 ноября 2012 г. 8:58
Создать коллекцию, в которой будут содержаться элементы с полями, которые вы хотите показывать. Добавлять элементы в коллекцию, они автоматически (если коллекция типа ObservableCollection) будут показываться в DataGrid. Например, у вас есть вот такой Grid:
<Grid> <Grid.RowDefinitions> <RowDefinition Height="30" /> <RowDefinition Height="1*" /> </Grid.RowDefinitions> <Button Content="Добавить строку" Click="Button_Click_1" /> <DataGrid x:Name="dgMain" AutoGenerateColumns="False" Grid.Row="1"> <DataGrid.Columns> <DataGridTextColumn Header="Первый столбец" Binding="{Binding First}" /> <DataGridTextColumn Header="Второй столбец" Binding="{Binding Second}" /> </DataGrid.Columns> </DataGrid> </Grid>Добавляете в проект вот такой класс:
class MyClass { public string First { get; set; } public string Second { get; set; } }В класс окна, на котором расположен Grid, добавляете вот такое свойство и код в обработчик клика на кнопке:
ObservableCollection<MyClass> collection = null; private void Button_Click_1(object sender, RoutedEventArgs e) { if (collection == null) { collection = new ObservableCollection<MyClass>(); dgMain.ItemsSource = collection; } collection.Add( new MyClass() { First = "aaa", Second = "bbb" } ); }Все, при нажатии на кнопку в DataGrid будет добавляться новая строка.
Хочу также добавить, что в таком чистом виде не заработает если не напомнить, что для использования ObservableCollection<T> надо добавить ссылку на сборку System.Collections.ObjectModel, и в самом конце
private void Button_Click_1(object sender, RoutedEventArgs e)
{
if (collection == null)
{
collection = new ObservableCollection<MyClass>();
}
collection.Add(
new MyClass() { First = "aaa", Second = "bbb" }
);dgMain.ItemsSource = collection;
}

