2016-11-26 1 views
1

Я пытался в течение нескольких часов и часов, но я не могу изменить количество столбцов в сетке, всякий раз, когда я делаю это дает мне ошибку, говоря, чтоEdititem не допускается для этого списка просмотра

Необработанное исключение типа " System.InvalidOperationException 'произошел в PresentationFramework.dll Дополнительная информация: «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; } 
} 

Где я буду неправильно? Я пробовал наблюдаемую коллекцию и до сих пор нет решения? Любая помощь будет оценена по достоинству.

ответ

3

Назначают List<AddItem> список в ItemSource вместо Add так:

Использование

DataGrid1.ItemsSource = DATA; 

вместо

DataGrid1.Items.Add(DATA); 

Другие улучшения вашего кода:

  • Использование decimal типа для всех цен (всегда)
  • Использование int типа для количества, поскольку количество представляют собой ряд
+0

Но тогда я не смогу добавить пункты один за другим, если я сделать это ItemSource –

+0

@NelsonCajetinDiegoAlfonso использует 'BindingList ' вместо 'List ', свяжите его, как я упомянул в своем ответе. Вы сможете добавлять элементы позже, например. 'DATA.Add (новый AddItem {ItemName =" foo ", ItemPrice = 160});' как только он привязан. Когда вы добавите его в список ... не непосредственно в datagrid. – Jim

+0

нормально, но как насчет таблицы данных? –

Смежные вопросы