我的网页上有5个控件,例如txtFirstName
(文本框),txtDisplayName
(文本框),txtFromDate
(文本框),txtToDate
(文本框)和btnFilter
(按钮)。另外,我通过使用DataTable在GridView同一页面上绑定了一些数据。
现在,我想使用上面提到的这些搜索参数控件来过滤DataTable。
过滤条件是,
我们不确定填充控件和空控件。因此,根据控件上输入的内容,我们需要过滤DataTable。如果控件值为空,则不应允许它们过滤Datatable。
我们需要通过LIKE运算符或String.Startswith()过滤数据值
如果txtFromDate和txtToDate已填充,那么我们需要过滤范围之间的数据值。
如果所有控件都已填充,则我们需要根据日期范围内的所有过滤器参数对数据表进行过滤。
我们如何实现这种过滤?请帮助我成功实施此操作。我们可以通过LINQ或Lamda表达式来做到这一点吗?如果是这样,请告诉我建议。
我尝试了两种方法,但是没有用,
第一种方式:
var test=dtActions.AsEnumerable().Where(z=>
!string.IsNullOrEmpty(txtFirstName.Text)? z.Field<string>("FirstName").ToUpper().StartsWith(txtFirstName.Text.ToUpper()) &&
!string.IsNullOrEmpty(txtDisplayName.Text)?z.Field<string>("DisplayName").ToUpper().StartsWith(txtDisplayName.Text.ToUpper()) &&
!string.IsNullOrEmpty(txtCreatedBy.Text)?z.Field<string>("CreatedBy").ToUpper().StartsWith(txtCreatedBy.Text.ToUpper());
我不知道在DateTime文本框之间获取数据。
第二种方式:
var results = from dataRow in dtActions.AsEnumerable()
where dataRow.Field<string>("FirstName").ToUpper().StartsWith(txtFirstName.Text.ToUpper()) ||
dataRow.Field<string>("DisplayName").ToUpper().StartsWith(txtFirstName.Text.ToUpper()) ||
((dataRow.Field<DateTime>("CreatedDate")>= Convert.ToDateTime(txtFromDate.Text)) && (dataRow.Field<DateTime>("CreatedDate")<= Convert.ToDateTime(txtToDate.Text)))
select dataRow;
以下代码有效:
var test = dtActions.AsEnumerable().Where(z =>
(string.IsNullOrEmpty(txtFirstName.Text) ? true : z.Field<string>("FirstName").ToUpper().StartsWith(txtFirstName.Text.ToUpper())) &&
(string.IsNullOrEmpty(txtDisplayName.Text) ? true : z.Field<string>("DisplayName").ToUpper().StartsWith(txtDisplayName.Text.ToUpper())) &&
(string.IsNullOrEmpty(txtCreatedBy.Text) ? true : z.Field<string>("CreatedBy").ToUpper().StartsWith(txtCreatedBy.Text.ToUpper()))
);
您的第二个查询
var results = from dataRow in dtActions.AsEnumerable()
where (string.IsNullOrEmpty(txtFirstName.Text) ? true : dataRow.Field<string>("FirstName").ToUpper().StartsWith(txtFirstName.Text.ToUpper())) ||
(string.IsNullOrEmpty(txtDisplayName.Text) ? true : dataRow.Field<string>("DisplayName").ToUpper().StartsWith(txtDisplayName.Text.ToUpper())) ||
(string.IsNullOrEmpty(txtCreatedBy.Text) ? true : dataRow.Field<string>("CreatedBy").ToUpper().StartsWith(txtCreatedBy.Text.ToUpper())) ||
(dataRow.Field<DateTime>("CreatedDate") >= Convert.ToDateTime(txtFromDate.Text) && (dataRow.Field<DateTime>("CreatedDate") <= Convert.ToDateTime(txtToDate.Text)))
select dataRow;
您的代码不起作用的原因是不正确的条件运算符。如果string为null或为空,则返回true,否则我们检查字段值。
应用ToList()
如果你想在年底列表或ToArray()
如果你想把它当作一个数组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句