我正在尝试通过两个日期选择器startDate和endDate筛选datagridview中的deadline列。
datagridview是TaskTable2, datetimepicker1是startSchedule, datetimepicker2是endSchedule, datagridview中的deadline是deadlineRow。
到目前为止,我已经得到了以下代码,成功地使不在所选起始日期和结束日期之间的行变得不可见。
然而,我遇到了几个问题:
datagridview是TaskTable2, datetimepicker1是startSchedule, datetimepicker2是endSchedule, datagridview中的deadline是deadlineRow。
到目前为止,我已经得到了以下代码,成功地使不在所选起始日期和结束日期之间的行变得不可见。
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.
}
}
然而,我遇到了几个问题:
- 当我选择一个日期范围来显示没有任务时,应用程序会崩溃并出现以下错误:
'Row associated with the currency manager's position cannot be made invisible'
- 我有一个打印按钮,它应该打印过滤后的结果。 然而,它打印出了 datagridview 中存储的所有数据,即使某些行的 visible=false 从按计划按钮,所以我猜我需要使用不同的方法来删除行,而不是隐藏它们。
datagridview 绑定到一个 XML 文件,因此可以从 datagridview 中删除数据以进行筛选和打印,只要它们仍然在 XML 文件中。
非常感谢您的帮助!
谢谢