我正在添加一个空白数据网格,以允许用户向其添加自己的信息,但是当我点击编辑用户通过按钮点击事件添加的字段时,我得到了可怕的'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); } } }更多推荐
发布评论