DataGrid SelectedItem to TextBox - PullRequest
       2

DataGrid SelectedItem to TextBox

0 голосов
/ 06 июня 2018

У меня есть этот код для заполнения моего DataGrid:

private void getData()
{
    var context = new dbStudentEntities();        
    var data = (from s in context.tblStudents
                join c in context.tblClasses
                on s.classID equals c.classID
                select new {
                        s.studentID, c.classID, s.firstName, s.middleName, 
                        s.lastName, s.age, c.className});

    dgStudents.ItemsSource = data.ToList();
}

Теперь я хочу, чтобы мой TextBox был заполнен SelectedItem в DataGrid.У меня есть этот код в моем событии SelectionChanged:

dbStudentEntities context = new dbStudentEntities();
try
{
    txtFirst.Text = ((tblStudent)dgStudents.SelectedItem).firstName.ToString();
    txtMiddle.Text = ((tblStudent)dgStudents.SelectedItem).middleName.ToString();
    txtLast.Text = ((tblStudent)dgStudents.SelectedItem).lastName.ToString();
    txtAge.Text = ((tblStudent)dgStudents.SelectedItem).age.ToString();
}
catch (Exception ex)
{
    MessageBox.Show("" + ex);
}

Но каждый раз, когда я выбираю строку, появляется эта ошибка:

Невозможно привести объект типа '<> f__AnonymousType07[System.Int32,System.Int32,System.String,System.String,System.String,System.Nullable 1 [System.Int32], System.String] 'для ввода' EFStudents.tblStudent '.

Что мне делать?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Хорошо, во-первых, я предполагаю, что вы используете EntityFramework, и ваш класс Student выглядит примерно так:

public class Student
{
   public int Id {get;set;}
   public string Name {get;set;} // and other names and age and so on
   public ICollection<Class> Classes {get;set;} // classes to which student attends
}

// your context

public class dbStudentEntities : DbContext
{
   public DbSet<Student> tblStudents {get;set;} // in CodeFirst this is enough to also create Classes table
}

//    then to populate DataGrid:

using(var ctx = new dbStudentEntities()) // this is your context, disposing it is important
{
   var students = ctx.Students.Include(x => x.Classes).ToList(); // Student.Classes is not virtual, so we don't have lazy loading, but making it virtual creates ugly proxy. You can read up on that
   dataGrid.ItemsSource = students;
}

Вам не нужен этот уродливый LINQ - EF может сделать всю работу за вас,

Теперь DataGrid.SelectedItem будет иметь тип Student, поэтому вы можете использовать свое приведение.

0 голосов
/ 06 июня 2018

В вашем файле .xaml:

<DataGrid Name="dgStudents" AutoGenerateColumns="True">
</DataGrid>

Чтобы создать список объектов, вы можете попробовать:

List<tblStudent> data = context.tblStudents.ToList();
dgStudent.ItemsSource = data;

Возможно, я допустил несколько синтаксических ошибок, так что посмотрите, какой компиляторошибки, если это не работает.

Сначала убедитесь, что данные находятся в таблице данных, а затем вы можете беспокоиться о том, что произойдет, когда вы выберете элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...