2

我正在开发一个用户界面来查看学生数据库中的学生详细信息。我的应用程序中有三个数据网格,如下所示:

左侧的第一个数据网格用于从列表中选择学生,另外两个必须显示有关所选学生的信息。

学生信息数据网格依赖于选择学生数据网格,个人信息数据网格依赖于学生信息数据网格。我已经完成了数据库连接以填充“选择学生”数据网格中的学生列表,但我不知道如何进一步进行。到目前为止,我已经明白我应该创建一个DataGridView.CellClick事件。

任何人都可以建议我进一步进行。

学生数据库的用户界面

4

3 回答 3

2

您可以将ItemsSourcePersonal Information数据网格的 绑定到Student InfoSelectedItem数据网格的,并将Student Info 数据网格的ItemsSource绑定到Select a Student数据网格的 。SelectedItem

这样,学生信息数据网格将在您选择学生时自动更新,学生信息数据网格将在您选择学生信息数据网格中的项目时自动更新。

绑定:

ItemsSource="{Binding ElementName=StudentDataGrid, Path=SelectedItem.StudentInfo}"

将 ElementName 和 Path 替换为您的数据网格的名称和正确的属性。

于 2013-02-04T14:01:12.307 回答
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 展示了它对 DataGrid 的工作方式相同。

于 2013-02-04T13:44:39.310 回答
0

在选择学生时,您应该获得所选记录的 ID。从那里,您可以根据记录的 ID 加载详细信息。

于 2013-02-04T13:41:55.323 回答