0

我遇到了问题,我检索了存储在数据库中的所有贷款,如下所示:

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 中创建的列?或者我该如何解决这个错误?

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

4

4 回答 4

1

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

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

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

于 2013-01-28T04:51:10.250 回答
1

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

我猜你需要这个SortableBindingList<T>

用法:

loanBindingSource.DataSource = new SortableBindingList<Loan>(list_loans.ToList());
dgv_Loans.Datasource = loanBindingSource; 
于 2013-01-28T07:45:33.910 回答
0
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();
于 2014-09-30T00:17:34.517 回答
0

您可以直接将数据源提供给,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();
于 2014-09-30T00:27:58.320 回答