当我的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中显示这两列。
答案 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
已修复此问题。