0

問題が発生しました。データベースに保存したすべてのローンを次のように取得します。

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

db はオブジェクト コンテキストです。

次に、そのリストを DataGridView の DataSource として割り当てます。

dgv_Loans.Datasource = list_loans;

その情報を使用して、いくつかの列を追加します。たとえば、残りの分割払いのように。クエリの結果を数えることでその値を取得します。

ユーザーは、いくつかのオプションを使用して結果を注文できます。エンティティが持つフィールドからの結果を (linq を使用して) 並べ替えるのは簡単ですが、この新しい列を使用して結果を並べ替える方法がわかりません。

ここでいくつかの投稿を読んで、これを試しました:

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

これを行うと、実行時に次の例外が発生します。

「DataGridView コントロールは、並べ替える IBindingList オブジェクトにバインドする必要があります。」

DataGridViewColumnで作成された列を並べ替えるためにlinqを使用する方法はありますか? または、どうすればこのエラーを解決できますか?

関連する投稿があることは知っていますが、それらを読んだ後、この特定の問題の解決策が見つかりません。そのため、アドバイスを得るためにどのように実装したかを示しました..

4

4 に答える 4

1

Entity Frameworkを使用して作成した列でデータグリッドビューをソートすることについて

これが必要だと思いますSortableBindingList<T>

使用法:

loanBindingSource.DataSource = new SortableBindingList<Loan>(list_loans.ToList());
dgv_Loans.Datasource = loanBindingSource; 
于 2013-01-28T07:45:33.910 に答える
1

データベースから取得したリストに直接バインドするのではなく、私が一般的に行っているのは、ビュー クラスを持ち、そのクラスに計算されたすべてのプロパティを持たせることです。

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

次に、データソースをこのリストにバインドすると、ソートが機能し続けます。

于 2013-01-28T04:51:10.250 に答える
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 に答える