У меня проблема с добавлением строки в 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 });
}
Не могли бы вы мне помочь?
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.
//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"/>
если DataGrid
привязан к источнику данных, обычный способ добавления/управления строками в элементе управления не действует на сам элемент управления (который показывает только содержимое связанного источника данных), но вместо этого попробуйте просто добавить/манипулировать содержимым самого источника данных, например, добавить новую запись структуры в коллекцию структуры, и DataGrid
немедленно отразит такую новую запись.
Структура данных должна быть реализована с помощью перечисляемого интерфейса. Для этой привязки вы можете добавить ее в ObservableCollection или любой класс, который реализует IEnumerable (например, списки, но это не обеспечивает наблюдаемости, но добавляет ваши данные в список), поэтому это дает вам основную реализацию элементов WPF. Также вам необходимо реализовать интерфейс INotifyPropertyChange для операции с привязкой к объектам, если это необходимо для вас.
Вы должны привязать DataGrid к ObservableCollection. Теперь, когда вы добавляете новый элемент в ObservableCollection, DataGrid будет обновляться с последними изменениями.
Пожалуйста, взгляните на этот пример: http://www.codeproject.com/Articles/42536/List-vs-ObservableCollection-vs-INotifyPropertyCha