从一个Datagrid访问数据到另一个

时间:2013-02-04 13:38:50

标签: c# wpf wpf-controls wpfdatagrid

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

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

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

有人建议我继续前进。

User Interface for Student database

3 个答案:

答案 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加载详细信息。