我有一个数据网格和文本框。当我在DataGrid中选择一行时,我希望文本框被该datagrid列的相关数据填充。这是图片。
我已经在MainWindow.xaml.cs中编写了以下代码:
private void personelEntityDataGrid_Loaded(object sender, RoutedEventArgs e)
{
PersonelEntity pers = (PersonelEntity)personelEntityDataGrid.SelectedItem;
NameBox.Text = pers.Name; // I get exception here
AgeBox.Text = pers.Age.ToString();
PhoneNumberBox.Text = pers.PhoneNumber;
AddresBox.Text = pers.Address;
}
当我运行代码时,我在编写的行中得到了null引用异常。这是例外:
{“你调用的对象是空的。”}
我猜对象pers为空。你能告诉我如何进行这项工作吗?
这是我的xaml文件:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Personel" mc:Ignorable="d" x:Class="Personel.MainWindow"
Title="MainWindow" Height="500" Width="725" Loaded="Window_Loaded">
<Window.Resources>
<CollectionViewSource x:Key="personelEntityViewSource" d:DesignSource="{d:DesignInstance {x:Type local:PersonelEntity}, CreateList=True}"/>
</Window.Resources>
<Grid DataContext="{StaticResource personelEntityViewSource}" >
<Label Content="Personnel
" HorizontalAlignment="Left" Margin="55,47,0,0" VerticalAlignment="Top"/>
<Button Content="Delete" HorizontalAlignment="Left" Margin="344,47,0,0" VerticalAlignment="Top" Width="75" Click="Delete_Button_Click"/>
<Button Content="Add" HorizontalAlignment="Left" Margin="477,47,0,0" VerticalAlignment="Top" Width="75" Click="Add_Button_Click"/>
<Button Content="Update" HorizontalAlignment="Left" Margin="624,47,0,0" VerticalAlignment="Top" Width="75" Click="Update_Button_Click"/>
<Label Content="Name" HorizontalAlignment="Left" Margin="55,91,0,0" VerticalAlignment="Top"/>
<Label Content="Age" HorizontalAlignment="Left" Margin="55,132,0,0" VerticalAlignment="Top"/>
<Label Content="Phone Number" HorizontalAlignment="Left" Margin="55,178,0,0" VerticalAlignment="Top"/>
<Label Content="Address" HorizontalAlignment="Left" Margin="55,218,0,0" VerticalAlignment="Top"/>
<TextBox HorizontalAlignment="Left" Height="23" Margin="309,95,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="367" Name="NameBox"/>
<TextBox HorizontalAlignment="Left" Height="23" Margin="309,136,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="57" Name="AgeBox"/>
<TextBox HorizontalAlignment="Left" Height="23" Margin="309,178,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120" Name="PhoneNumberBox"/>
<TextBox HorizontalAlignment="Left" Height="23" Margin="309,222,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="367" Name="AddresBox"/>
<DataGrid x:Name="personelEntityDataGrid" AutoGenerateColumns="False" SelectionChanged="personelEntityDataGrid_SelectionChanged" EnableRowVirtualization="True" ItemsSource="{Binding Path=.}" Margin="10,291,0,-22" RowDetailsVisibilityMode="VisibleWhenSelected" Loaded="personelEntityDataGrid_Loaded">
<DataGrid.Columns>
<DataGridTextColumn x:Name="addressColumn" Binding="{Binding Address}" Header="Address" Width="SizeToHeader"/>
<DataGridTextColumn x:Name="ageColumn" Binding="{Binding Age}" Header="Age" Width="SizeToHeader"/>
<DataGridTextColumn x:Name="idColumn" Binding="{Binding Id}" Header="Id" Width="SizeToHeader"/>
<DataGridTextColumn x:Name="nameColumn" Binding="{Binding Name}" Header="Name" Width="SizeToHeader"/>
<DataGridTextColumn x:Name="phoneNumberColumn" Binding="{Binding PhoneNumber}" Header="Phone Number" Width="SizeToHeader"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
不要签入Loaded事件,而是签入selectionChanged事件,还向你的pers对象添加一个空检查
private void personelEntityDataGrid_SelectionChanged(object sender, RoutedEventArgs e)
{
PersonelEntity pers = (PersonelEntity)personelEntityDataGrid.SelectedItem;
if(pers != null)
{
NameBox.Text = pers.Name; // I get exception here
AgeBox.Text = pers.Age.ToString();
PhoneNumberBox.Text = pers.PhoneNumber;
AddresBox.Text = pers.Address;
}
}
谢谢。我做了您所说的,但现在我明白了:错误1'Personel.MainWindow'不包含'personelEntityDataGrid_Loaded'的定义,并且找不到扩展方法'personelEntityDataGrid_Loaded'接受类型为'Personel.MainWindow'的第一个参数(您是否缺少using指令或程序集引用?)\ Personel \ Personel \ MainWindow.xaml 23 94 Personel
@jason您需要删除XAML中的Grid_Loaded事件并添加SelectionChanged事件
您的XAML仍然有Loaded =“ personelEntityDataGrid_Loaded”,将其删除