cómo atar IGrouping ¿A la cuadrícula de datos que contienen datos?
Soy nuevo en Wpf y tengo un problema. Tengo 2 modelos: El modelo 1 es Estudiante y el modelo 2 es Curso. Quiero mostrar para cada estudiante cuáles son los cursos que toma en combobox, y no sé cómo atar IGrouping a DataGrid que contienen DataTemplate.
Este es mi código:
public IEnumerable>student_courses { get; set; }
public P_Show_Student()
{
InitializeComponent();
Load_Student();
}
private void Load_Student()
{
using (var db = new DataBaseContext())
{
var registerd_student = db.Student_Course.Include(x => x.Student_Id_FK).Include(x => x.Course_Id_FK).AsEnumerable().GroupBy(x => x.Student_Id).ToList();
student_courses = registerd_student as IEnumerable>;
Student.ItemsSource = student_courses;
}
}
Y este es mi modelo:
public class Student_Course
{
[Key]
public int Student_Course_Id { get; set; }
public int Course_Id { get; set; }
public int Student_Id { get; set; }
[ForeignKey(nameof(Course_Id))]
public Course Course_Id_FK { get; set; }
[ForeignKey(nameof(Student_Id))]
public Student Student_Id_FK { get; set; }
}
Y Este es mi código XAML:
El problema es cuando cargue esta página el Vacío ComboBox y no muestra nada. de antemano.
Pregunta hecha hace 3 años, 5 meses, 6 días - Por compilercaptain7dab
2 Respuestas:
-
Para mostrar los cursos de cada estudiante en un ComboBox dentro de un DataGrid, necesitas realizar algunos ajustes en tu código.
Primero, en tu XAML, debes corregir el binding del ItemsSource del ComboBox para que apunte a la propiedad correcta en la plantilla de celda. En este caso, debes establecer el ItemsSource del ComboBox en el IGrouping correspondiente en el DataContext actual.
Aquí te dejo una posible manera de hacerlo:
xml
Además, asegúrate de asignar el DataContext adecuado en tu XAML. Puedes hacerlo en el constructor de tu clase code-behind después de haber cargado los datos de los estudiantes:
csharp private void Load_Student() { using (var db = new DataBaseContext()) { var registered_student = db.Student_Course.Include(x => x.Student_Id_FK).Include(x => x.Course_Id_FK).AsEnumerable().GroupBy(x => x.Student_Id).ToList(); student_courses = registered_student as IEnumerable
>; Student.ItemsSource = student_courses; foreach (var studentGroup in student_courses) { studentGroup.ToList().ForEach(sc => sc.Student_Id_FK.Courses = db.Student_Course.Where(x => x.Student_Id == sc.Student_Id).Select(x => x.Course_Id_FK).ToList()); Student.Items.Refresh(); // Refresca la vista del DataGrid } } this.DataContext = student_courses; } Ten en cuenta que en el código anterior hice una suposición sobre la estructura de tu modelo, por lo que es posible que tengas que hacer ajustes para que sea compatible con tu implementación real.
Espero que esta solución te ayude a mostrar los cursos de cada estudiante en el ComboBox dentro de tu DataGrid. ¡Déjame saber si tienes alguna otra pregunta o necesitas más ayuda!
Respondida el Dec 18, 2020 a las 00:49 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Problema:
El ComboBox dentro de DataGrid no muestra ningún dato porque
{Binding student_courses}
no está enlazado correctamente debido a un error tipográfico.Solución:
Corrige el enlace de datos en el ComboBox de la siguiente manera:
xaml
Debería ser:
xaml
Explicación:
student_courses
es la propiedad que contiene los datos para llenar el ComboBox. El enlace de datos correcto debe utilizar esta propiedad en lugar deStudent_Id_FK.Student_Course
.Código completo:
xaml
Respondida el Dec 18, 2020 a las 00:56 - por Gemini
Votos positivos: 0 | Votos negativos: 0