Как добавить строку в Datagrid в C # WPF

1

У меня проблема с добавлением строки в Datagrid в С# WPF.

Я создал Struct для данных:

public struct MyData
{
    public int id { set; get; }
    public string title { set; get; }
    public int jobint { set; get; }
    public DateTime lastrun { set; get; }
    public DateTime nextrun { set; get; }
}

и способ добавления данных:

  private void Add_Data_Grid_Row(object sender, RoutedEventArgs e)
        {
            Button button = sender as Button;
            DockPanel panel = button.Parent as DockPanel;
            DataGrid usedDataGrid = panel.Children.OfType<DataGrid>().FirstOrDefault();

            usedDataGrid.Items.Add(new MyData { id = 11123, title = "King", jobint = 1993123, lastrun = DateTime.Today, nextrun = DateTime.Today  });

        }

Не могли бы вы мне помочь?

Теги:
wpf
datagrid

5 ответов

1
Лучший ответ
        DataTable dt = new DataTable();

        DataColumn column;
        DataRow row;
        DataView view;

        row = new DataRow();
        dt.Rows.Add(row);
        column = new DataColumn();
        column.DataType = System.Type.GetType("System.Int32");
        column.ColumnName = "id";
        dt.Columns.Add(column);

        column = new DataColumn();
        column.DataType = Type.GetType("System.String");
        column.ColumnName = "item";
        dt.Columns.Add(column);

        for (int i = 0; i < 10; i++)
        {
            row = dt.NewRow();
            row["id"] = i;
            row["item"] = "item " + i.ToString();
            dt.Rows.Add(row);
        }

        view = new DataView(dt);
        dataView1.ItemsSource = view;

Где dataView1 = Имя вашего Datagrid.

1
 //Use ObservableCollection
 public ObservableCollection<MyData> MySource {get;set;}

 //initialize once, eg. ctor
 this.MySource = new ObservableCollection<MyData>();

 //add items
 this.MySource.Add(new MyData { id = 11123, title = "King", jobint = 1993123, lastrun = DateTime.Today, nextrun = DateTime.Today});

 //set the itemssource
 usedDataGrid.ItemsSource = this.MySource;

или перейдите по пути MVVM и используйте Binding вместо codebehind и установите sourcesource, если вы не установили AutogenerateColumns в true, вы должны определить свои столбцы с привязками

 <DataGrid ItemsSource="{Binding MySource}" AutogenerateColumns="true"/>
0

если DataGrid привязан к источнику данных, обычный способ добавления/управления строками в элементе управления не действует на сам элемент управления (который показывает только содержимое связанного источника данных), но вместо этого попробуйте просто добавить/манипулировать содержимым самого источника данных, например, добавить новую запись структуры в коллекцию структуры, и DataGrid немедленно отразит такую новую запись.

0

Структура данных должна быть реализована с помощью перечисляемого интерфейса. Для этой привязки вы можете добавить ее в ObservableCollection или любой класс, который реализует IEnumerable (например, списки, но это не обеспечивает наблюдаемости, но добавляет ваши данные в список), поэтому это дает вам основную реализацию элементов WPF. Также вам необходимо реализовать интерфейс INotifyPropertyChange для операции с привязкой к объектам, если это необходимо для вас.

0

Вы должны привязать DataGrid к ObservableCollection. Теперь, когда вы добавляете новый элемент в ObservableCollection, DataGrid будет обновляться с последними изменениями.

Пожалуйста, взгляните на этот пример: http://www.codeproject.com/Articles/42536/List-vs-ObservableCollection-vs-INotifyPropertyCha

Ещё вопросы

Сообщество Overcoder
Наверх
Меню