按创建的列对数据网格视图进行排序.实体框架 c# Winforms

本文关键字:排序 实体 框架 Winforms 视图 网格 创建 数据网 数据 | 更新日期: 2023-09-27 17:56:11

我遇到了问题,我像这样检索存储在数据库中的所有贷款:

list_loans = db.Loan.Where(x => x.State.id_state != 6).ToList();

db 是对象上下文。

然后,我将该列表分配为我的 DataGridView 的数据源。

dgv_Loans.Datasource = list_loans;

有了这些信息,我添加了一些列。例如,分期付款需要支付。我通过计算查询结果来获得该值。

用户可以使用某些选项对结果进行排序。很容易从实体具有的字段中对结果进行排序(使用 linq),但我不知道如何使用这个新列对结果进行排序。

我在这里阅读了一些帖子并尝试了这个:

dgv_Loans.Sort(dgv_Loans.Columns["installments_left"], ListSortDirection.Ascending);

通过这样做,我在运行时得到以下异常:

"DataGridView 控件必须绑定到要排序的 IBindingList 对象。

是否可以使用 linq 按 DataGridViewColumn 中创建的列进行排序?或者我该如何解决此错误?

我知道有相关的帖子,但是阅读后,我找不到解决这个特定问题的方法。这就是为什么我展示了我如何实施以获得一些建议。

按创建的列对数据网格视图进行排序.实体框架 c# Winforms

我通常做的不是直接绑定到从数据库中检索的列表,而是拥有一个视图类,并将所有计算属性都放在该类中

public class LoanView : Loan {
  public LoanView(Loan loan){
  }
  public int InsallmentsLeft { get { return ...; } }
}

然后将数据源绑定到此列表,这将保持排序工作。

关于使用实体框架按创建的列对数据网格视图进行排序

我想你需要这个呈现SortableBindingList<T>

用法:

loanBindingSource.DataSource = new SortableBindingList<Loan>(list_loans.ToList());
dgv_Loans.Datasource = loanBindingSource; 
int ID = Convert.ToInt32(cmbDepartments.SelectedValue);
var EmployeeList = from Employee in db.Employee
    where Employee.DepartmentID == ID
    select new
    {
        Employee.FirstName,
        Employee.LastName
    };
dataGridView1.DataSource = EmployeeList.ToList();

您可以直接将数据源提供给dataGridView1.DataSource但必须在查询结束时编写ToList()

int ID = Convert.ToInt32(cmbDepartmanlar.SelectedValue);
dataGridView1.DataSource = (from Employee in db.Employee
                            where Employee.DepartmentID == ID
                   select new
                   {
                       Employee.FirstName,
                       Employee.LastName
                   }).ToList();