none
wpf DataGrid Добавление строки. RRS feed

Ответы

Все ответы

  • Создать коллекцию, в которой будут содержаться элементы с полями, которые вы хотите показывать. Добавлять элементы в коллекцию, они автоматически (если коллекция типа 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 Dmitry 4 мая 2012 г. 9:45
    • Отменено предложение в качестве ответа NIKkakNIK 6 мая 2012 г. 11:24
    Отвечающий
  • Также посмотрите обсуждение о том как программно добавлять строки и стобцы в DataGrid


    Для связи [mail]

    • Помечено в качестве ответа NIKkakNIK 6 мая 2012 г. 11:24
  • 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" });
            }
        }

  • Создать коллекцию, в которой будут содержаться элементы с полями, которые вы хотите показывать. Добавлять элементы в коллекцию, они автоматически (если коллекция типа 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;

    }


    5 ноября 2012 г. 8:58