我正在开发用户界面以查看学生数据库中的学生详细信息。 我的应用程序中有三个datagrids,如下所示:
左边的第一个数据网格用于从列表中选择学生,另外两个必须显示有关所选学生的信息。
学生信息数据网格依赖于选择学生数据网格,个人信息数据网格依赖于学生信息 datagrid。 我已经完成了数据库连接以填充Select a Student数据网格中的学生列表,但我不知道如何继续进行。到目前为止,我已经明白我应该创建一个DataGridView.CellClick
事件。
有人建议我继续前进。
答案 0 :(得分:2)
您可以将个人信息数据网格的ItemsSource
绑定到学生信息数据网格的SelectedItem
和学生信息数据网格到选择学生数据网格的SelectedItem
。
这样,学生信息数据网格会在您选择学生时自动更新,学生信息数据网格会在您选择学生中的项目时自动更新信息 datagrid。
绑定:
ItemsSource="{Binding ElementName=StudentDataGrid, Path=SelectedItem.StudentInfo}"
将ElementName和Path替换为datagrids的名称和正确的属性。
答案 1 :(得分:1)
嗨如果您关注MVVM,那么最好绑定DataGrid的SelectedItem / SelectedValue以获取SelectedItem而不是SelectionChanged事件。我希望这会有所帮助。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListBox ItemsSource="{Binding Students}" DisplayMemberPath="Name" SelectedItem="{Binding SelectedStudent, Mode=TwoWay}"/>
<StackPanel Grid.Column="1">
<TextBlock Text="{Binding SelectedStudent.FamilyName}"/>
<TextBlock Text="{Binding SelectedStudent.PhoneNumber}"/>
</StackPanel>
</Grid>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
}
public class ViewModel : INotifyPropertyChanged
{
public ViewModel()
{
Students = new ObservableCollection<Student>();
Students.Add(new Student()
{
Name = "James",
FamilyName = "mangol",
PhoneNumber = "01234 111111"
});
Students.Add(new Student()
{
Name = "Bob",
FamilyName = "angol",
PhoneNumber = "01234 222222"
});
Students.Add(new Student()
{
Name = "Emma",
FamilyName = "pangol",
PhoneNumber = "01234 333333"
});
}
public ObservableCollection<Student> Students { get; set; }
private Student selectedStudent;
public Student SelectedStudent
{
get { return selectedStudent; }
set { selectedStudent = value; Notify("SelectedStudent"); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void Notify(string propName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
public class Student:INotifyPropertyChanged
{
private string name;
public string Name
{
get { return name; }
set { name = value; Notify("Name"); }
}
private string familyname;
public string FamilyName
{
get { return familyname; }
set { familyname = value;Notify("FamilyName"); }
}
private string phonenumber;
public string PhoneNumber
{
get { return phonenumber; }
set { phonenumber = value; Notify("PhoneNumber"); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void Notify(string propName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
上面的例子演示了如何使用Binding来使用 SelectedItem 。这不是你问题的确切解决方案,但这会让你知道如何使用SelectedItem。我已经为ListBox显示它的工作方式相同数据网格。
答案 2 :(得分:0)
在选择学生时,您应该获得所选记录的ID。从那里,您可以根据记录的ID加载详细信息。