1

comboboxの並べ替えオプションを作成していますdatagridview

private DataClasses1DataContext db = new DataClasses1DataContext();
private int numberOfObjectsPerPage = 20;
private int CurrentPageIndex = 1;
private string ordering = "c.name ascending";

private void Form1_Load(object sender, EventArgs e)
{
    GetData(CurrentPageIndex);            
}

private void GetData(int page)
{
    page = page - 1;            

    var query = (from c in db.enterprise
    orderby ordering
                    select new { c.id, c.name, c.phone, c.email, c.type, c.city })
                    .Skip(numberOfObjectsPerPage * page).Take(numberOfObjectsPerPage);

    dataGridView1.DataSource = query;
}

private void orderBtn_Click(object sender, EventArgs e)
{
    if (orderCB.SelectedIndex == 1)
    {
        ordering = "c.name descending";
    }
    else if (orderCB.SelectedIndex == 2)
    {
        ordering = "c.id ascending";
    }
    else if (orderCB.SelectedIndex == 3)
    {
        ordering = "c.id descending";
    }
    else
    {
        ordering = "c.name ascending";
    }

    GetData(CurrentPageIndex);            
}

ここで 2 つの問題が発生しました。

  1. 私の現在のデータは約2.500行です。20ページネーションを使用しているため、データ/ページが表示されますが、 datagridview. 何が間違っている可能性がありますか?
  2. 注文ボタンが機能しません。

C# を使うのはこれが初めてなので、ここで何か見落としているかもしれません :D

アップデート

だから私は自分のコードを the_joric からの提案として変更しました

Func<IEnumerable<cooperations>, IEnumerable<cooperations>> ordering = t => t;

この参照に基づいてDBTypeを協力に変更します(私が正しいことを願っています:D) ここに画像の説明を入力

しかし、その後、私のデータグリッドビューには何も表示されません。私が得たのはこれです

System.Linq.Enumerable+<TakeIterator>d__3a`1[<>f__AnonymousType0`7[System.Int32,System.String,System.String,System.String,System.String,System.String,System.String]]
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
4

1 に答える 1

2

定数文字列キーで並べ替えているため、ボタンが機能しません。キーセレクターを取るメソッドorderbyのシンタックスシュガーです。OrderBy<>()あなたの場合、そのセレクターは常にすべてのアイテムで同じ文字列です。ただし、オブジェクトを受け取り、そのキーを返す関数でなければなりません

あなたはそのようなことを試すことができます:

// instead of DbType your should use the type of db.enterprise
Func<IEnumerable<DbType>, IEnumerable<DbType>> ordering= t => t; // default ordering (as it is)
...
var query = (from c in ordering(db.enterprise)
                    select new { c.id, c.name, c.phone, c.email, c.type, c.city })
                    .Skip(numberOfObjectsPerPage * page).Take(numberOfObjectsPerPage);
...
// in your button click method
if (orderCB.SelectedIndex == 1)
{

    ordering = t => t.OrderByDescending(i => i.name); 
}
else if (orderCB.SelectedIndex == 2)
{
    ordering = t => t.OrderBy(i => i.id); 
}
...
于 2013-01-23T16:41:52.817 に答える