编辑一个空白的数据网格wpf(Edit a blank datagrid wpf)

编程入门 行业动态 更新时间:2024-10-24 07:33:05
编辑一个空白的数据网格wpf(Edit a blank datagrid wpf)

我正在添加一个空白数据网格,以允许用户向其添加自己的信息,但是当我点击编辑用户通过按钮点击事件添加的字段时,我得到了可怕的'EditItem'不允许这样做视图。 我已经通过这个错误看了类似的问题,但不能为我的生活解决我的问题。 我理解这是为没有为数据网格设置itemsource但我不知道我可以添加它来解决我的问题。 希望有人可以告诉我我的方式的错误。 一如既往地感谢您的帮助。

XAML <Grid> <DataGrid x:Name="ResultsDataGrid" HorizontalAlignment="Left" Margin="87,356,0,0" VerticalAlignment="Top" Height="134" Width="835" IsReadOnly="False" CanUserAddRows="True" CanUserDeleteRows="True"> <DataGrid.Columns> <DataGridTextColumn x:Name="StationID" Header="Station ID"/> <DataGridTextColumn x:Name="Pointnumber" Header="Point Number"/> <DataGridTextColumn x:Name="Description" Header="Description"/> <DataGridTextColumn x:Name="Velocity" Header="Velocity (MilliSeconds)"/> <DataGridTextColumn x:Name="Status" Header="Status"/> </DataGrid.Columns> </DataGrid> <Button x:Name="AddResult" Content="Add Result" HorizontalAlignment="Left" Margin="752,495,0,0" VerticalAlignment="Top" Width="75" Click="AddResult_Click"/> <Button x:Name="RemoveResult" Content="Remove Result" HorizontalAlignment="Left" Margin="832,495,0,0" VerticalAlignment="Top" Width="90" Click="RemoveResult_Click"/> </Grid> C# using System.Collections.Generic; using System.Windows; namespace DataGridTest { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } public class AddResultRow { public string StationID { get; set; } public string Pointnumber { get; set; } public string Description { get; set; } public string Velocity { get; set; } public string Status { get; set; } } private List<AddResultRow> addnewrow() { List<AddResultRow> result = new List<AddResultRow>(); result.Add(new AddResultRow() { StationID = "", Pointnumber = "", Description = "", Velocity = "", Status = "" }); return result; } private void AddResult_Click(object sender, RoutedEventArgs e) { ResultsDataGrid.Items.Add(addnewrow()); } private void RemoveResult_Click(object sender, RoutedEventArgs e) { var selectedItem = ResultsDataGrid.SelectedItem; if (selectedItem != null) { ResultsDataGrid.Items.Remove(selectedItem); } } } }

I am adding a blank datagrid to allow users to add there own information to it, but when I click to edit the fields that have been added by the user through a button click event, I get the dreaded 'EditItem' is not allowed for this view. I have looked through the similar questions with this error, but can't for the life of me resolve my issue. I understand it is to do with not having itemsource set for the datagrid but I am at a loss where I can add this in to solve my problem. Hopefully someone can show me the error of my ways. Thanks for your help as always.

XAML <Grid> <DataGrid x:Name="ResultsDataGrid" HorizontalAlignment="Left" Margin="87,356,0,0" VerticalAlignment="Top" Height="134" Width="835" IsReadOnly="False" CanUserAddRows="True" CanUserDeleteRows="True"> <DataGrid.Columns> <DataGridTextColumn x:Name="StationID" Header="Station ID"/> <DataGridTextColumn x:Name="Pointnumber" Header="Point Number"/> <DataGridTextColumn x:Name="Description" Header="Description"/> <DataGridTextColumn x:Name="Velocity" Header="Velocity (MilliSeconds)"/> <DataGridTextColumn x:Name="Status" Header="Status"/> </DataGrid.Columns> </DataGrid> <Button x:Name="AddResult" Content="Add Result" HorizontalAlignment="Left" Margin="752,495,0,0" VerticalAlignment="Top" Width="75" Click="AddResult_Click"/> <Button x:Name="RemoveResult" Content="Remove Result" HorizontalAlignment="Left" Margin="832,495,0,0" VerticalAlignment="Top" Width="90" Click="RemoveResult_Click"/> </Grid> C# using System.Collections.Generic; using System.Windows; namespace DataGridTest { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } public class AddResultRow { public string StationID { get; set; } public string Pointnumber { get; set; } public string Description { get; set; } public string Velocity { get; set; } public string Status { get; set; } } private List<AddResultRow> addnewrow() { List<AddResultRow> result = new List<AddResultRow>(); result.Add(new AddResultRow() { StationID = "", Pointnumber = "", Description = "", Velocity = "", Status = "" }); return result; } private void AddResult_Click(object sender, RoutedEventArgs e) { ResultsDataGrid.Items.Add(addnewrow()); } private void RemoveResult_Click(object sender, RoutedEventArgs e) { var selectedItem = ResultsDataGrid.SelectedItem; if (selectedItem != null) { ResultsDataGrid.Items.Remove(selectedItem); } } } }

最满意答案

如果您希望能够编辑项目,请不要将对象添加到DataGrid的Items集合中。 相反,您应该将ItemsSource属性设置为ObservableCollection<AddResultRow>并将项添加到此项:

public class AddResultRow { public string StationID { get; set; } public string Pointnumber { get; set; } public string Description { get; set; } public string Velocity { get; set; } public string Status { get; set; } } public partial class MainWindow : Window { private readonly ObservableCollection<AddResultRow> _items = new ObservableCollection<AddResultRow>(); public MainWindow() { InitializeComponent(); ResultsDataGrid.ItemsSource = _items; } private AddResultRow addnewrow() { return new AddResultRow() { StationID = "", Pointnumber = "", Description = "", Velocity = "", Status = "" }; } private void AddResult_Click(object sender, RoutedEventArgs e) { _items.Add(addnewrow()); } private void RemoveResult_Click(object sender, RoutedEventArgs e) { var selectedItem = ResultsDataGrid.SelectedItem as AddResultRow; if (selectedItem != null) { _items.Remove(selectedItem); } } }

Don't add objects to the Items collection of the DataGrid if you want to be able to edit the items. Instead you should set the ItemsSource property to an ObservableCollection<AddResultRow> and add items to this one:

public class AddResultRow { public string StationID { get; set; } public string Pointnumber { get; set; } public string Description { get; set; } public string Velocity { get; set; } public string Status { get; set; } } public partial class MainWindow : Window { private readonly ObservableCollection<AddResultRow> _items = new ObservableCollection<AddResultRow>(); public MainWindow() { InitializeComponent(); ResultsDataGrid.ItemsSource = _items; } private AddResultRow addnewrow() { return new AddResultRow() { StationID = "", Pointnumber = "", Description = "", Velocity = "", Status = "" }; } private void AddResult_Click(object sender, RoutedEventArgs e) { _items.Add(addnewrow()); } private void RemoveResult_Click(object sender, RoutedEventArgs e) { var selectedItem = ResultsDataGrid.SelectedItem as AddResultRow; if (selectedItem != null) { _items.Remove(selectedItem); } } }

更多推荐

本文发布于:2023-08-07 21:00:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1466001.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:网格   空白   编辑   数据   blank

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!