按创建的列对数据网格视图进行排序.实体框架 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 中创建的列进行排序?或者我该如何解决此错误?
我知道有相关的帖子,但是阅读后,我找不到解决这个特定问题的方法。这就是为什么我展示了我如何实施以获得一些建议。
我通常做的不是直接绑定到从数据库中检索的列表,而是拥有一个视图类,并将所有计算属性都放在该类中
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();