I am trying to display data in a datagrid but it is not displaying any data. While going through breakpoints, I have learned the following:
- The object, receipt has data
- ocReceiptItem has values
- After assign ocReceiptItem to grdSalesCart's datacontext, I can see that the values are in the datacontext
- The binding names and the names in ocReceiptItem match
I am not sure why it isn't populating as it has data in the DataContext
DataGrid:
<DataGrid Name="grdSalesCart" Grid.Column="1" Grid.ColumnSpan="12" Grid.Row="12" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
AutoGenerateColumns="False" CanUserSortColumns="false" ScrollViewer.VerticalScrollBarVisibility="Auto" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Remove Item" Width="3*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Name="btnRemoveItem" Content="Remove Item" Click="btnRemoveItem_Click"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Edit Item" Width="2*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Name="btnEditItem" Content="Edit Item" Click="btnEditItem_Click"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="SKU" Width="2*" Binding="{Binding intItemIndicator, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsReadOnly="True"/>
<DataGridTextColumn x:Name="txtCartQuantity" Header="Quantity" Width="3*" Binding="{Binding intQuantity, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsReadOnly="True"/>
<DataGridTextColumn Header="Description" Width="9*" Binding="{Binding varItemDescription, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsReadOnly="True"/>
<DataGridTextColumn Header="Price" Width="3*" Binding="{Binding intItemPrice, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Converter={StaticResource Double}}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Discount" Width="3*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBox Name="txtDiscountAmountCart" Text="{Binding intItemDiscount, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsEnabled="False"/>
<CheckBox Name="chkDiscountPercent" Content="Percent?" IsChecked="{Binding bitIsPercentageDiscount, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsEnabled="False"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Code:
private Receipt receipt;
private ObservableCollection<ReceiptItem> ocReceiptItem;
private void UpdateCartAndTotals()
{
TransactionManager TM = new TransactionManager();
receipt = TM.ReturnReceiptTotalsAndCart(receipt);
ocReceiptItem = receipt.lstReceiptItem;
grdSalesCart.DataContext = ocReceiptItem;
//DataContext = ocReceiptItem;
//grdSalesCart.ItemsSource = DGM.ReturnSelectedDataTable(13, criteria).DefaultView;
}
What I have tried:
- Instead of DataContext, I tried setting the ItemsSource with no luck
- Set the DataContext in the DataGrid definition
- Set the ItemsSource in the DataGrid definition
- Changing ocReceiptItem to a list of type ReceiptItem
- Changing receipt and ocReceiptItem to public
Some other stackoverflow questions that I have looked at: