Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在datagridview上搜索和筛选_C#_Datagridview - Fatal编程技术网

C# 在datagridview上搜索和筛选

C# 在datagridview上搜索和筛选,c#,datagridview,C#,Datagridview,我正在使用下面的函数加载gridview以形成表单 private DataClasses1DataContext db_cooperations = new DataClasses1DataContext(); private int numberOfObjectsPerPage = 20; private int CurrentPageIndex = 1; Func<IEnumerable<cooperations>, IEnumerable<cooperation

我正在使用下面的函数加载gridview以形成表单

private DataClasses1DataContext db_cooperations = new DataClasses1DataContext();
private int numberOfObjectsPerPage = 20;
private int CurrentPageIndex = 1;

Func<IEnumerable<cooperations>, IEnumerable<cooperations>> ordering = t => t.OrderBy(i => i.name);

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

 private void GetData(int page)
{
    page = page - 1;
    db_cooperations.Log = Console.Out;  

    var query = (from c in ordering(db_cooperations.cooperations)
                select new { c.id, c.name, c.phone, c.email, c.city })
                .Skip(numberOfObjectsPerPage * page).Take(numberOfObjectsPerPage).ToList();


    dataGridView1.DataSource = query ;
}

但它仍然不起作用

在linq语句中添加where子句

顺便说一句:所有的排序、过滤和投影都是在内存中完成的。在应用任何记录集之前,您正在将整个记录集加载到内存中,因为您使用的是
IEnumerable
,而不是
IQueryable

以便根据
name
过滤(搜索)数据,同时在Linq to Sql中过滤
city

您使用了
SQL的
,它们在C中表示为
|
|
,并表示为
类似于
SQL的
。下面是一个关于使用
.Contains

PS:也许我会错过你的问题,但你这样做

.where(c => c.name.ToLower().Contains(searchTxt.Text.ToLower()) && 
                                c => c.city == cityCB.Text)
编辑:

从您的更新中

   if (String.IsNullOrEmpty(searchTxt.Text) == false)
    {
      query = query.Where(c => c.name.ToLower().Contains(searchTxt.Text.ToLower())).ToList();
    }

    if (cityCB.SelectedIndex > -1)
    {
       query =  query.Where(c => c.city.ToLower().Equals(cityCB.Text.ToLower())).ToList();
    }

因此,我将按照下面的代码解决这个问题

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

if (String.IsNullOrEmpty(searchTxt.Text) == false && searchTxt.Text.Trim() != "Search....")
    {
        query = from c in query
        where c.name.ToLower().Contains(searchTxt.Text.ToLower())
        select new { c.id, c.name, c.phone, c.email, c.city })
    }

if (kotaCB.SelectedIndex > -1)
    {
        query = from c in query
                where c.kota.ToLower().Equals(kotaCB.Text.ToLower())
                select new { c.id, c.name, c.phone, c.email, c.city });
        }

dataGridView1.DataSource = query.ToList();

感谢大家帮助我@spajce,@Jason

订购我可以使用这个:
ordering=t=>t.OrderBy(I=>I.nama)。然后对于搜索,我尝试这样做:
ordering=t=>t.Where(I=>I.name.Contains(searchTxt.Text))。但事实并非如此work@l1th1um,我更新了我的回答,但是。。你试过我的第一个答案了吗?
.where(c => c.name.ToLower().Contains(searchTxt.Text.ToLower()) && 
                                c => c.city == cityCB.Text)
   if (String.IsNullOrEmpty(searchTxt.Text) == false)
    {
      query = query.Where(c => c.name.ToLower().Contains(searchTxt.Text.ToLower())).ToList();
    }

    if (cityCB.SelectedIndex > -1)
    {
       query =  query.Where(c => c.city.ToLower().Equals(cityCB.Text.ToLower())).ToList();
    }
var query = (from c in ordering(db_cooperations.cooperations)
                         select new { c.id, c.name, c.phone, c.email, c.city })
                         .Skip(numberOfObjectsPerPage * page).Take(numberOfObjectsPerPage);

if (String.IsNullOrEmpty(searchTxt.Text) == false && searchTxt.Text.Trim() != "Search....")
    {
        query = from c in query
        where c.name.ToLower().Contains(searchTxt.Text.ToLower())
        select new { c.id, c.name, c.phone, c.email, c.city })
    }

if (kotaCB.SelectedIndex > -1)
    {
        query = from c in query
                where c.kota.ToLower().Equals(kotaCB.Text.ToLower())
                select new { c.id, c.name, c.phone, c.email, c.city });
        }

dataGridView1.DataSource = query.ToList();