C# 使用日期筛选datagridview
我正试图通过两个日期时间选择器(startDate和endDate)过滤datagridview中的截止日期列 datagridview是TaskTable2, datetimepicker1是startSchedule, datetimepicker2是endSchedule和 datagridview中的截止日期为deadlineRow 到目前为止,我已经得到了以下代码,它成功地使不在所选开始日期和结束日期之间的行不可见C# 使用日期筛选datagridview,c#,winforms,datagridview,datetimepicker,C#,Winforms,Datagridview,Datetimepicker,我正试图通过两个日期时间选择器(startDate和endDate)过滤datagridview中的截止日期列 datagridview是TaskTable2, datetimepicker1是startSchedule, datetimepicker2是endSchedule和 datagridview中的截止日期为deadlineRow 到目前为止,我已经得到了以下代码,它成功地使不在所选开始日期和结束日期之间的行不可见 private void scheduleButton_Click(o
private void scheduleButton_Click(object sender, EventArgs e)
{
DateTime startSchedule = startDate.Value.Date;
DateTime endSchedule = endDate.Value.Date;
if (startSchedule <= endSchedule)// runs foreach loop if startdate and enddate are valid
{
foreach (DataGridViewRow dr in TaskTable2.Rows)// loops through rows of datagridview
{
string deadline = dr.Cells["Deadline"].Value.ToString(); // gets deadline values
DateTime deadlineRow = Convert.ToDateTime(deadline); // converts deadline string to datetime and stores in deadlineRow variable
if (startSchedule <= deadlineRow && deadlineRow <= endSchedule) // filters deadlines that are => startDate and <= endDate
{
dr.Visible = true; // display filtered rows here.
}
else
{
dr.Visible = false; // hide rows that are not beteen start and end date.
}
}
}
else
{
MessageBox.Show("Please ensure Start Date is set before End Date."); // ensures user selects an end date after the start date.
}
}
private void scheduleButton\单击(对象发送方,事件参数e)
{
DateTime startSchedule=startDate.Value.Date;
DateTime endSchedule=endDate.Value.Date;
如果(startSchedule,我将对datagridview
使用bindingsource
上的Filter
属性。使用Filter
属性可以查看数据源的子集
示例来自:
private void填充数据视图和过滤器()
{
数据集set1=新数据集();
//用于填充数据集的一些xml数据。
弦乐=
"" +
"" +
"
在不存在的日期使用筛选器不会使应用程序崩溃,它只会显示任何内容。在此处找到了异常的解决方案:
在尝试将行设置为不可见之前,我已将其直接添加到代码中。row
是我的ForEach
循环变量。在设置visible
属性之前,我会检查其是否选中,以及是否尝试清除行和单元格选择
If gridItems.SelectedRows.Count > 0 AndAlso row.Index = gridItems.SelectedRows(0).Index Then
'fixes dumb exception with row.visible = false
gridItems.ClearSelection()
gridItems.CurrentCell = Nothing
End If
问题似乎在于使当前行或单元格不可见。我遇到了完全相同的问题,唯一的例外是“不能使与货币经理职位相关的行不可见”
dgridView.CurrentCell = null;
dgridView.Rows[i].Visible = false;
只需将CurrentCell设置为null,我就可以修复它。如果它损坏了某些内容,我没有进一步检查它。看起来您甚至不需要先清除所选内容;只需将CurrentCell设置为null/nothing,我就可以解决这个问题。谢谢您的提示!
dgridView.CurrentCell = null;
dgridView.Rows[i].Visible = false;