DataGrid填充TreeView SelectedItemChanged中的空白行

时间:2011-01-11 16:44:03

标签: c# wpf linq datagrid lambda

当我的DataGrid填充TreeView的SelectedItemChanged事件时,它会找到对象并相应地创建行,但行填充没有文本或只是空白。所以我知道它是找到我的对象,但它没有正确显示它们。有谁看到我在哪里犯了错误或建议任何更改或修复?提前谢谢!

以下是设置DataGrid的ItemsSource的CSharp代码(我正在使用带有Lambda表达式的.dbml和LINQ):

dgSystemSettings.ItemsSource = (tvSystemConfiguration.SelectedItem as SYSTEM_SETTINGS_GROUP)
                               .SYSTEM_SETTINGS_NAMEs
                               .Join(ssdc.SYSTEM_SETTINGS_VALUEs, x => x.SSN_ID, 
                                     y => y.SSV_SSN_ID, 
                                     (x, y) => new { SYSTEM_SETTINGS_NAME = x, 
                                     SYSTEM_SETTINGS_VALUE = y });

这是.xaml:

    <DataGrid Name="dgSystemSettings" 
              AutoGenerateColumns="False" 
              Height="447" Width="513" 
              DockPanel.Dock="Right" 
              ItemsSource="{Binding}" 
              VerticalAlignment="Top" 
              Margin="10,10,0,0">
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="colDisplayName" 
                                Header="Name" 
                                Binding="{Binding SSN_DISPLAY_NAME}"></DataGridTextColumn>
            <DataGridTextColumn x:Name="colValue" 
                                Header="Value" 
                                Binding="{Binding SSV_VALUE}"></DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

SSN_DISPLAY_NAME是SYSTEM_SETTINGS_NAMES中的一栏 SSV_VALUE是SYSTEM_SETTINGS_VALUES

中的一列

我在lambda表达式中加入了表,所以我只能在DataGrid中显示这两列。

2 个答案:

答案 0 :(得分:1)

我相信您可能希望将DataGridTextColumn的文本更改为以下内容:

<DataGrid Name="dgSystemSettings" AutoGenerateColumns="False" Height="447" Width="513" DockPanel.Dock="Right" ItemsSource="{Binding}" VerticalAlignment="Top" Margin="10,10,0,0">
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="colDisplayName" Header="Name" Binding="{Binding SYSTEM_SETTING_NAME.SSN_DISPLAY_NAME}"></DataGridTextColumn>
        <DataGridTextColumn x:Name="colValue" Header="Value" Binding="{Binding SYSTEM_SETTING_VALUE.SSV_VALUE}"></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

由于你的行填充了正确数量的项目,我认为它必须是一个绑定问题。当您设置DataGrid的ItemsSource时,它会查找该对象的View Collection。您的数据就在那里,您只需要在绑定中包含表名。代码中的每个项目都包含两个表对象,表格包含您要查找的属性。

答案 1 :(得分:0)

我的xaml中AutoGenerateColumns设置为False。将其设置为True已修复此问题。