在DataGridView中显示已过滤的行

时间:2012-03-08 16:58:26

标签: c# winforms datagridview

我刚刚完成了一些代码,这些代码成功地过滤了2个datetimepickers - startSchedule和endSchedule之间的截止日期。

目前if语句是在我想要的时候启动的,但是我不确定在if语句中放入哪些代码来显示datagridview中的过滤行。

datagridview具有以下列 - 模块,描述,截止日期,优先级。

如何在if语句中显示符合条件的相应行。

如果您需要更多信息,请告诉我。谢谢。

这是我到目前为止的代码:

 private void scheduleButton_Click(object sender, EventArgs e)
    {

        DateTime startSchedule = startDate.Value.Date;
        DateTime endSchedule = endDate.Value.Date;
            foreach (DataGridViewRow dr in TaskTable2.Rows)
                {
                    string deadline = dr.Cells["Deadline"].Value.ToString();
                    DateTime deadlineRow = Convert.ToDateTime(deadline);   
                    if (startSchedule <= deadlineRow && deadlineRow <= endSchedule)
                    {
                        MessageBox.Show("Display Row"); // display filtered rows here.

                    }
                }
            }

2 个答案:

答案 0 :(得分:1)

取决于您如何设置DataGridView。理想情况下,您可能会从SQL方面做到这一点,但如果您愿意,可以这样做。

如果你的if语句不符合,也许只是隐藏行:

else
dr.Visible = false;

如果我误解了你的想法,请告诉我。

答案 1 :(得分:0)

反问题:您使用什么作为DataGridView的.Datasource?

概念上这是一个很好的界限,但实际上并没有过滤DataGridView的行。而是过滤DGV正在显示的数据源。例如,如果您有DataTable作为数据源,则可以使用DataTable.Select方法过滤数据源。由于我的应用程序通常有业务对象,我使用TimVW的FilterList作为对象的通用列表,我将其设置为我的DGV的数据源。 FilterList有一个.Filter()方法来过滤数据源。只要过滤了DGV的.Datasource属性中的对象,DGV就会更新屏幕上显示的行。