【问题标题】:Edititem is not allowed for this view list此视图列表不允许编辑项目
【发布时间】:2017-04-10 12:31:47
【问题描述】:

我已经尝试了好几个小时,但我无法编辑数据网格中的列数量,每当我这样做时都会给我一个错误提示

PresentationFramework.dll 中出现“System.InvalidOperationException”类型的未处理异常 附加信息:此视图不允许使用“EditItem”。

我的 xaml 代码是

<DataGrid EnableRowVirtualization="True" Grid.Row="3" Grid.ColumnSpan="2" AutoGenerateColumns="False" Name="DataGrid1" IsReadOnly="False" ItemsSource="{Binding Products}" Margin="10,10,10,10" PreviewKeyDown="DataGrid1_PreviewKeyDown" SelectionChanged="DataGrid1_SelectionChanged" CellEditEnding="DataGrid1_CellEditEnding" CanUserAddRows="True" CanUserDeleteRows="True" BeginningEdit="DataGrid1_BeginningEdit" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Item Name" IsReadOnly="True" Binding="{Binding Path=ItemName}" Width="*"></DataGridTextColumn>
            <DataGridTextColumn Header="Item Price" IsReadOnly="True"  Binding="{Binding Path=ItemPrice}" Width="*"></DataGridTextColumn>
            <DataGridTextColumn x:Name="QuantityColumn" Header="Quantity" IsReadOnly="False"  Binding="{Binding Path=Quantity, Mode=TwoWay}" Width="*"></DataGridTextColumn>
            <DataGridTextColumn Header="Total Price" IsReadOnly="True" Binding="{Binding Path=TotalPrice}" Width="*">
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

这里是 C# 代码

List<AddItem> DATA = new List<AddItem>()
{
    new AddItem()
    {
        ItemName = ItemName.Text.ToString(),
        ItemPrice = float.Parse(ItemPrice.Text.ToString()),
        Quantity = quantity.Text,
        TotalPrice = CalculateTotalPrice()
    }
};
DataGrid1.Items.Add(DATA);

public class AddItem
{
    public string ItemName { get; set; }
    public float ItemPrice { get; set; }
    public string Price { get; set; }
    public string Quantity { get; set; }
    public decimal TotalPrice { get; set; }
}

我哪里错了?我试过 observable collection 还是没有解决办法? 任何帮助将不胜感激。

【问题讨论】:

标签: c# wpf xaml datagrid wpfdatagrid


【解决方案1】:

List&lt;AddItem&gt; 列表分配给ItemSource 而不是Add,如下所示:

使用

DataGrid1.ItemsSource = DATA;

而不是

DataGrid1.Items.Add(DATA);

对代码的其他改进:

  • 所有价格(始终)使用decimal 类型
  • 使用 int 类型作为数量,因为数量代表一个数字

【讨论】:

  • 但是,如果我将它添加到 itemsource,我将无法一一添加项目
  • @NelsonCajetinDiegoAlfonso 使用BindingList&lt;T&gt; 而不是List&lt;T&gt;,如我在回答中提到的那样链接它。您稍后将能够添加项目,例如DATA.Add(new AddItem { ItemName = "foo", ItemPrice = 160 }); 绑定后。当您将其添加到列表中时...而不是直接添加到数据网格中。
  • @NelsonCajetinDiegoAlfonso 更准确 ;-) 怎么样?
  • 我应该将DATA添加到数据表中,然后将其绑定到itemsource吗?会更好吗?
  • @NelsonCajetinDiegoAlfonso 不,没关系
猜你喜欢
  • 1970-01-01
  • 2017-04-26
  • 2018-03-25
  • 1970-01-01
  • 2012-01-30
  • 2011-11-25
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
相关资源
最近更新 更多