Here is the DataGrid XAML:
<DataGrid CanUserAddRows="False" AutoGenerateColumns="False" Height="501" HorizontalAlignment="Left" Margin="6,6,0,0" Name="dataGridTrades" VerticalAlignment="Top" Width="574" SelectionChanged="dataGridTrades_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding TradeID}" IsReadOnly="true"/>
<DataGridTextColumn Header="Account" Binding="{Binding AccountName}" IsReadOnly="true"/>
<DataGridTextColumn Header="Card Name" Binding="{Binding CardName}" IsReadOnly="true"/>
<DataGridTextColumn Header="Set" Binding="{Binding SetMark}" IsReadOnly="true"/>
<DataGridTextColumn Header="Count" Binding="{Binding TradeCount}" IsReadOnly="true"/>
<DataGridTextColumn Header="Trade Date" Binding="{Binding TradeDate}" IsReadOnly="true"/>
<DataGridTextColumn Header="Tradepoint Name" Binding="{Binding TradepointName}" IsReadOnly="true"/>
<DataGridTextColumn Header="Price" Binding="{Binding Price}" IsReadOnly="true" Width="*"/>
</DataGrid.Columns>
</DataGrid>
Here is a query to populate it:
public static List<RowTrade> GetTradeList(DataContext dataContext)
{
return (from trade in dataContext.Trades
join account in dataContext.Accounts on trade.accountID equals account.accountID
join tradePoint in dataContext.TradePoints on trade.tradePointID equals tradePoint.tradePointID
join card in dataContext.Cards on trade.cardID equals card.cardID
join set in dataContext.Sets on card.setID equals set.setID
select new RowTrade(
trade.tradeID,
account.accountName,
card.cardName,
set.setMark,
trade.tradeCount,
trade.tradeDate.ToString(),
tradePoint.tradePointName,
(double)trade.cardPrice)).ToList();
}
Here I populate it:
private void tabControlOrganizer_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (tabControlOrganizer.SelectedItem != null)
{
if (tabControlOrganizer.SelectedItem == tabItemTrades)
{
dataGridTrades.ItemsSource = Queries.GetTradeList(dataContext);
}
When I click on row, it doesn't hightlight. I added 2 events to check this behavior:
private void dataGridTrades_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (dataGridTrades.SelectedItem != null)
{
listBoxMessage.Items.Add(((RowTrade)dataGridTrades.SelectedItem).TradeID);
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
if (dataGridTrades.SelectedItem != null)
{
listBoxMessage.Items.Add(((RowTrade)dataGridTrades.SelectedItem).TradeID);
}
}
While I'm clicking (selection changed), I can print value on listBox. So selected row is not null. But after dataGrid loose hightlight, it become null (I can't print it after clicking button).
How to fix it? I need to have this SelectedItem to be highlighted. I have couple more dataGrids and all behave normal.