C#winform如何在特定列不为空时筛选组合框

C#winform如何在特定列不为空时筛选组合框,c#,sql,winforms,combobox,C#,Sql,Winforms,Combobox,例如,我有一个项目表: ProjectID | ProjectName | EstimateStartDate | EstimateEndDate | ActaulStartDate | ActualEndDate | 1 |Liberty Green| 06-26-2017 | 06-30-2017 | 06-26-2017 | 08-30-2017 | 2 | Wharton | 06-26-2017

例如,我有一个项目表:

ProjectID | ProjectName | EstimateStartDate | EstimateEndDate | ActaulStartDate | ActualEndDate | 1 |Liberty Green| 06-26-2017 | 06-30-2017 | 06-26-2017 | 08-30-2017 | 2 | Wharton | 06-26-2017 | 06-30-2017 | null | null | 投影|项目名称|估计开始日期|估计结束日期|实际开始日期| 1 |自由绿| 06-26-2017 | 06-30-2017 | 06-26-2017 | 08-30-2017| 2 |沃顿| 06-26-2017 | 06-30-2017 |空|空|
因此,基本上我希望所有ActualStartDate和ActualLendDate为null的行都显示在ComboBoxProjectName中,所有not null的行都将不再显示在ComboxProjectName中。

您可以尝试选择ActualStartDate为null的所有行。。。然后按datatable设置数据源组合框:

SqlConnection con = new SqlConnection("ConnectionString");
        try
        {
            if (con.State == ConnectionState.Closed) con.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "Select * from Project Table where ActaulStartDate is null and ActualEndDate is null";
            cmd.Connection = con;
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);

            comboBox1.DataSource = dt;
            comboBox1.DisplayMember = "ProjectName";
            comboBox1.ValueMember = "ProjectID";
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            if (con.State == ConnectionState.Open) con.Close();
        }

日期时间在c#中不能为空。您最多只能得到默认日期:1/1/01,因此在c#中,您可以测试年份>1900(或类似年份)的有效日期。使用c#中的SQL,可以测试DBNull.Value,以测试表是否包含null项。