пытается использовать одно условие при сортировке столбца представления таблицы данных - PullRequest
0 голосов
/ 29 августа 2011

Я использую функцию ниже, если щелкнуть заголовок столбца представления таблицы данных, будет отсортирован весь столбец представления таблицы данных ...

private void dgvproducts_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
   if (order == "d")
   {
        //order by ascending
        order = "a";
       dgvproducts.DataSource = dbcontext.products
           .GroupBy(x => x.product_Id)
           .Select(a => new
             {
                    productid = a.Key,
                    prouctnam = a.FirstOrDefault().product_Name,
                    productimage = a.FirstOrDefault().product_Image,
                    productdescr = a.FirstOrDefault().product_Description,
                    stockavailable = a.LongCount(),
                    productprice = a.FirstOrDefault().product_Price
             }).OrderBy(a=>a.prouctnam).ToList();
    }
    else
    {
        // order by descending
        order = "d";
        dgvproducts.DataSource = dbcontext.products
            .GroupBy(x => x.product_Id)
            .Select(a => new
         {
                  productid = a.Key,
                  prouctnam = a.FirstOrDefault().product_Name,
                  productimage = a.FirstOrDefault().product_Image,
                  productdescr = a.FirstOrDefault().product_Description,
                  stockavailable = a.LongCount(),
                  productprice = a.FirstOrDefault().product_Price
         }).OrderByDescending(a => a.prouctnam).ToList();

    }
}    

это работает нормально ....

что я хочу, есть ли возможность проверить одно условие и привязку таблицы данных сразу ...

вместо того, чтобы делать два раза ......

Большое спасибо заранее залюбые идеи ....

1 Ответ

1 голос
/ 29 августа 2011

Вы можете выполнить рефакторинг и применить только часть заказа позже - таким образом вы избежите большей части дублированного кода:

var products = dbcontext.products
                        .GroupBy(x => x.product_Id)
                        .Select(a => new
                        {
                            productid = a.Key,
                            prouctnam = a.FirstOrDefault().product_Name,
                            productimage = a.FirstOrDefault().product_Image,
                            productdescr = a.FirstOrDefault().product_Description,
                            stockavailable = a.LongCount(),
                            productprice = a.FirstOrDefault().product_Price
                        });

if (order == "d")
{
    order = "a";
    dgvproducts.DataSource = products.OrderBy(a=>a.prouctnam).ToList();
}
else
{
    order = "d";
    dgvproducts.DataSource = products.OrderByDescending(a=>a.prouctnam).ToList();
}
...