如何解决如何在c#中对数据表应用过滤器?它给出错误
public void btn_abnrmalsixnine_Click(object sender,EventArgs e)
{
try
{
DataTable dt_temp = new DataTable();
DataSet ds = (DataSet)ViewState["GridViewData"];
//DataTable DT_Main = (DataTable)ViewState["GridViewData"];
DataTable DT_Main = ds.Tables[0];
dt_temp = DT_Main.Clone();
//Button btnEdit = (Button)sender;
//ASPxGridView Grow = (ASPxGridView)btnEdit.NamingContainer;
// Session["AttendanceDate"] = Grow.RowIn
for (int i = 0; i < grv_NormalabnormalSummaryReport.VisibleRowCount; i++)
{
Session["AttendanceDate"] = (this.grv_NormalabnormalSummaryReport.GetRowValues(i,"AttendanceDate").ToString());
string AttendanceDate = Session["AttendanceDate"].ToString();
// ASPxGridView row = (ASPxGridView)grv_NormalabnormalSummaryReport.GetSelectedFieldValues();
dt_temp = DT_Main.AsEnumerable().Where(r => r.Field<DateTime>("AttendanceDate").ToString() == AttendanceDate
&& r.Field<string>("AttendanceStatus").ToString() == "Abnormal" &&
r.Field<int>("TravelTime") >= 6 &&
r.Field<int>("TravelTime") <= 9).CopyToDataTable();
grv_EmployeeList.DataSource = dt_temp;
grv_EmployeeList.DataBind();
popupEmployeeList.ShowOnPageLoad = true;
}
它给出异常'源不包含数据行'
解决方法
不要在 CopyToDataTable()
之后使用 Where
。只需存储在 query
中,然后为 query.Count() > 0
添加条件,如果它有任何记录,则返回 true
,然后仅使用 CopyToDataTable()
。
试试下面的完整代码。
var query = DT_Main.AsEnumerable().Where(r => r.Field<DateTime>("AttendanceDate").ToString() == AttendanceDate &&
r.Field<string>("AttendanceStatus").ToString() == "Abnormal" &&
r.Field<int>("TravelTime") >= 6 &&
r.Field<int>("TravelTime") <= 9);
if (query.Count() > 0)
{
dt_temp = query.CopyToDataTable();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。