C# 在datagridview上搜索和筛选
我正在使用下面的函数加载gridview以形成表单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
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();