I have requirement on Nested datagrid in WPF.
Parent Grid Shown Order information of Consumers.When User click the details in order information, need to be displayed ordered items details in child datagrid(Means Nested grid) within the parent row of order information.
For this i am using <DataGrid.RowDetailsTemplate>
to bind child datagrid.
My XAML code is as follows.
<Popup Name="popup1" IsOpen="False" Placement="Mouse" Height="500" Width="700">
<Border BorderBrush="Black" BorderThickness="1" Background="White">
<StackPanel Orientation="Horizontal">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<DataGrid Grid.Row="0" Grid.Column="0" SelectedValuePath="orderid"
AutoGenerateColumns="False" Height="350"
HorizontalAlignment="Left" Margin="114,128,0,0" x:Name="gridOrder" VerticalAlignment="Top" Width="500">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Order Status">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="{Binding OrderStatus}" Click="EditButton_Click" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Full Name" Binding="{Binding fullname}" />
<DataGridTextColumn Header="Order ID" Binding="{Binding orderid}" />
<DataGridTextColumn Header="Mobile" Binding="{Binding mobile}" />
<DataGridTextColumn Header="No. of Items" Binding="{Binding countofItems}" />
<DataGridTextColumn Header="Total Price" Binding="{Binding Total_Price}" />
<DataGridTextColumn Header="Order Status" Binding="{Binding OrderStatus}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid x:Name="gridOrderDetails" AutoGenerateColumns="False"
Height="200" HorizontalAlignment="Left" Margin="121,132,0,0" VerticalAlignment="Top" Width="200">
<DataGrid.Columns>
<DataGridTextColumn Header="Item ID" Binding="{Binding itemid}" />
<DataGridTextColumn Header="Item Name" Binding="{Binding ItemName}" />
<DataGridTextColumn Header="Item No." Binding="{Binding ItemNo}" />
<DataGridTextColumn Header="Quantity" Binding="{Binding quantity}" />
<DataGridTextColumn Header="Comments" Binding="{Binding comments}" />
<DataGridTextColumn Header="Item Price" Binding="{Binding ItemPrice}" />
<DataGridTextColumn Header="Quantity" Binding="{Binding quantity}" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
<Button Content="Close" Grid.Row="1" Grid.Column="1" Click="PopUp_OK_Click"/>
</Grid>
</StackPanel>
</Border>
</Popup>
My C# code is as follows:
private void EditButton_Click(object sender, RoutedEventArgs e)
{
try
{
DBDataContext dbContext = new DBDataContext();
SP_Get_OrderItemResult orderRow = gridOrder.SelectedItem as SP_Get_OrderItemResult;
DataGrid grid = gridOrder.FindResource("gridOrderDetails") as DataGrid;
grid.ItemsSource = dbContext.SP_Get_ItemList(orderRow.orderid);
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
return;
}
}
I am unable to pass the orderid of gridOrder in FindResource(:gridOrderDetails").
DataGrid grid = gridOrder.FindResource("gridOrderDetails") as DataGrid;
Getting error at above line as 'gridOrderDetails' resource not found.