按创建的列对datagridview进行排序。实体框架c#Winforms
我遇到了一个问题,我检索存储在数据库中的所有贷款,如下所示:按创建的列对datagridview进行排序。实体框架c#Winforms,c#,winforms,sorting,entity-framework-4,datagridview,C#,Winforms,Sorting,Entity Framework 4,Datagridview,我遇到了一个问题,我检索存储在数据库中的所有贷款,如下所示: list_loans = db.Loan.Where(x => x.State.id_state != 6).ToList(); db是对象上下文 然后,我将该列表指定为DataGridView的数据源 dgv_Loans.Datasource = list_loans; 根据这些信息,我添加了一些列。比如,分期付款。我通过计算查询结果得到该值 用户可以使用一些选项对结果进行排序。从实体拥有的字段(使用linq)对结果进行排
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对象。”
是否仍然可以在DataGridViewColumn中使用linq to orderby创建的列?或者我如何解决这个错误
我知道有相关的帖子,但读完后,我找不到解决这个具体问题的方法。这就是为什么我展示了如何实现以获取一些建议。我通常使用的是一个视图类和该类中的所有计算属性,而不是直接绑定到从数据库检索到的列表
public class LoanView : Loan {
public LoanView(Loan loan){
}
public int InsallmentsLeft { get { return ...; } }
}
然后将数据源绑定到一个列表,这将保持排序工作。关于使用实体框架通过创建列对datagridview进行排序
我想你需要这个
用法:
loanBindingSource.DataSource=new sortablebindingslist(list_loans.ToList());
dgv_Loans.Datasource=贷款绑定源;
您可以直接将数据源提供给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();
谢谢,但是使用创建的列不是其他方法吗?我可以在创建列时创建比较器吗?另一种方法是通过自定义排序来实现。更多信息请访问,但我有一个相同的例外:/您是否使用了sortcompare事件或是否实现了IComparer界面,如果您发布排序实现的代码会有所帮助我为用户提供了很多筛选选项,我认为使用视图类是解决此问题的最佳方法。我遇到了以下错误:找不到类型或命名空间名称“SortableBindingList”(您是否缺少using指令或程序集引用?)。我无法通过右键单击来解决它。是的,您已经下载了类()吗?好的,我下载了类,将其添加到我的项目中,并编写了那行代码。现在,我得到了下一个错误:“数据绑定DataGridView控件只能对绑定到数据的列进行排序。参数名称:DataGridViewColumn”对不起,我错了,您必须使用链接中说明的BindingSource.:)什么是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();
int ID = Convert.ToInt32(cmbDepartmanlar.SelectedValue);
dataGridView1.DataSource = (from Employee in db.Employee
where Employee.DepartmentID == ID
select new
{
Employee.FirstName,
Employee.LastName
}).ToList();