2013-06-21 189 views
0

HI我有2个组合框(Ex cb1,cb2),其中一个组合框,另一个组合框中有机器组。 当我选择cb1它应该显示总数没有过滤cb2,但是当我选择cb2它应该过滤records.everything工作正常,但默认文本不显示在combobox2(如总计或所有机器) 我的问题是当我选择combobox1显示总数,但combobox2是空的它应该显示文本与总计/所有机器在其中我尝试了几种方法,我不能那样做。基于另一个组合框筛选组合框值,但是在运行时组合框2为空

private void Form1_Load(object sender, EventArgs e) 
     { 

     try 
     { 
      this.dtStartDate.Value = DateTime.Now.AddDays(-3); 
      this.dtEndDate.Value = DateTime.Now; 
      PopulateGroupList(); 
      cboMachines.Items.Insert(0, "-ALL MACHINES-"); 
      cboMachines.SelectedIndex = 0; 
      //cboMachines.SelectedText = "Please Select One"; 
      cboMachineGroup.SelectedText = "Please Select One"; 
      //this.cboMachineGroup.SelectedIndex = 0; 
      PopulateMachineList(); 


     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     btnShowForDateRange.Enabled = true; 
    } 


    private void PopulateMachineList() 
    { 
     cboMachines.Items.Clear(); 

     string stringSql = "SELECT DISTINCT lfh.OriginalMachineName " + 
     "FROM MachineGroups mg " + 
     "INNER JOIN MachineGroupList mgl " + 
     "ON (mg.GroupID = mgl.GroupID) " + 
     "INNER JOIN LogFileHeader lfh ON (mgl.MachineID = lfh.FKMachineID) " + 
     "WHERE [email protected] " + 
     "ORDER BY lfh.OriginalMachineName" ; 



     DataTable myDatatable = new DataTable(); 
     SqlConnection myConn = new SqlConnection(); 
     myConn.ConnectionString = connString; 


     SqlCommand myCommand = new SqlCommand(); 
     myCommand.CommandType = CommandType.Text; 
     myCommand.CommandText = stringSql; 
     myCommand.Connection = myConn; 
     myCommand.Parameters.Add("@groupname", SqlDbType.VarChar).Value = this.cboMachineGroup.Text; 
     myConn.Open(); 

     SqlDataReader reader = myCommand.ExecuteReader(); 

     if (reader.HasRows) 
     { 
      while (reader.Read()) 
      { 
       this.cboMachines.Items.Add(reader[0].ToString()); 
      } 
     } 

    } 

    private void PopulateGroupList() 
    { 
     string stringSql = "SELECT DISTINCT mg.Name FROM MachineGroups mg ORDER BY Name"; 
     DataTable myDatatable = new DataTable(); 
     SqlConnection myConn = new SqlConnection(); 
     myConn.ConnectionString = connString; 

     SqlCommand myCommand = new SqlCommand(); 
     myCommand.CommandType = CommandType.Text; 
     myCommand.CommandText = stringSql; 
     myCommand.Connection = myConn; 
     myConn.Open(); 

     SqlDataReader reader = myCommand.ExecuteReader(); 

     if (reader.HasRows) 
     { 
      while (reader.Read()) 
      { 
       this.cboMachineGroup.Items.Add(reader.GetString(0)); 
      } 
     } 

    } 

    public DataTable GetDataByMachineGroupAndDateRange(string startDate, string endDate, string machineGroupname, string machineID) 
    { 

     startDate = startDate + " 00:00:00"; 
     endDate = endDate + " 23:59:59"; 

     string stringSql = ""; 
     if (machineID.Length >0) 
     { 



      stringSql = "SELECT mg.GroupID, mg.Name, " + 
     "CONVERT(VARCHAR(10),rta.IDdatetime,121) AS date_only, " + 
     "CONVERT(VARCHAR(8), rta.IDdatetime, 108) AS time_only, " + 
     "rta.TicketPrice, rta.CardAmount, rta.FKTariffID, rta.RegistrationNum, rta.ExpiryDateTime, " + 
     "lfh.OriginalMachineName " + 
     "FROM MachineGroups mg " + 
     "INNER JOIN MachineGroupList mgl " + 
     "ON (mg.GroupID = mgl.GroupID) " + 
     "INNER JOIN LogFileHeader lfh ON (mgl.MachineID = lfh.FKMachineID) " + 
     "INNER JOIN RegistrationTransactionData rta ON (lfh.PKId = rta.FKLogFileHeader) " + 
     "WHERE [email protected] AND [email protected] " + 
     "AND rta.IDdatetime BETWEEN @startdate AND @enddate " + 
     "ORDER BY rta.IDdatetime" ; 
     } 



     else 
     { 
      stringSql = "SELECT mg.GroupID, mg.Name, " + 
     "CONVERT(VARCHAR(10),rta.IDdatetime,121) AS date_only, " + 
     "CONVERT(VARCHAR(8), rta.IDdatetime, 108) AS time_only, " + 
     "rta.TicketPrice, rta.CardAmount, rta.FKTariffID, rta.RegistrationNum, rta.ExpiryDateTime, " + 
     "lfh.OriginalMachineName " + 
     "FROM MachineGroups mg " + 
     "INNER JOIN MachineGroupList mgl " + 
     "ON (mg.GroupID = mgl.GroupID) " + 
     "INNER JOIN LogFileHeader lfh ON (mgl.MachineID = lfh.FKMachineID) " + 
     "INNER JOIN RegistrationTransactionData rta ON (lfh.PKId = rta.FKLogFileHeader) " + 
     "WHERE [email protected] " + 
     "AND rta.IDdatetime BETWEEN @startdate AND @enddate " + 
     "ORDER BY rta.IDdatetime"; 
     } 


     DataTable myDatatable = new DataTable(); 
     SqlConnection myConn = new SqlConnection(); 
     myConn.ConnectionString = connString; 

     SqlCommand myCommand = new SqlCommand(); 
     myCommand.CommandType = CommandType.Text; 
     myCommand.CommandText = stringSql; 
     myCommand.Connection = myConn; 

     SqlDataAdapter myAdapter = new SqlDataAdapter(); 
     myAdapter.SelectCommand = myCommand; 

     myCommand.Parameters.Add("@groupname", SqlDbType.VarChar).Value = machineGroupname; 
     if (machineID.Length > 0) 
     { 
      myCommand.Parameters.Add("@machineid", SqlDbType.VarChar).Value = machineID; 

     } 
     myCommand.Parameters.Add("@startdate", SqlDbType.DateTime).Value = startDate; 
     myCommand.Parameters.Add("@enddate", SqlDbType.DateTime).Value = endDate; 


     myAdapter.Fill(myDatatable); 

     return myDatatable; 
    } 

    private void btnShowForDateRange_Click(object sender, EventArgs e) 
    { 

     tblDateRange = new DataTable(); 
     this.btnShowForDateRange.Enabled = false; 
     this.btnFindVRM.Enabled = false; 
     this.progressBar1.Visible = true; 
     btnExport.Enabled = false; 
     this.cboMachines.SelectedText = "ALL Machines"; 
     string[] parameters = { dtStartDate.Value.ToString("yyyy-MM-dd"), dtEndDate.Value.ToString("yyyy-MM-dd"), this.cboMachineGroup.Text, this.cboMachines.Text }; 
     this.backgroundWorker1.RunWorkerAsync(parameters); 

    } 

    private void btnQuit_Click(object sender, EventArgs e) 
    { 
     Application.Exit(); 
    } 

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     string[] parameters = (string[])e.Argument; 
     tblDateRange = GetDataByMachineGroupAndDateRange(parameters[0], parameters[1], parameters[2], parameters[3]); 
    } 

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     this.dataGridView1.DataSource = tblDateRange; 
     this.btnShowForDateRange.Enabled = true; 
     this.btnFindVRM.Enabled = true; 
     this.progressBar1.Visible = false; 
     this.lblCount.Visible = true; 
     this.lblCount.Text = "Count: " + tblDateRange.Rows.Count.ToString(); 
     tblVRM = new DataTable(); 
     btnExport.Enabled = true; 
    } 

    private void cboMachineGroup_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     //this.cboMachines.Text = ""; 

     PopulateMachineList(); 
    } 

    private void cboMachines_SelectedIndexChanged(object sender, EventArgs e) 
    { 

    } 

    private void btnFindVRM_Click(object sender, EventArgs e) 
    { 
     tblVRM = new DataTable(); 
     this.btnShowForDateRange.Enabled = false; 
     this.btnFindVRM.Enabled = false; 
     this.progressBar1.Visible = true; 
     btnExport.Enabled = false; 

     string[] parameters = { txtVRM.Text }; 
     this.backgroundWorker2.RunWorkerAsync(parameters); 
    } 


    public DataTable GetDataByVRM(string vrm_in) 
    { 

     string stringSql = "SELECT mg.GroupID, mg.Name, " + 
     "CONVERT(VARCHAR(10),rta.IDdatetime,121) AS date_only, " + 
     "CONVERT(VARCHAR(8), rta.IDdatetime, 108) AS time_only, " + 
     "rta.TicketPrice, rta.CardAmount, rta.FKTariffID, rta.RegistrationNum, rta.ExpiryDateTime, " + 
     "lfh.OriginalMachineName " + 
     "FROM MachineGroups mg " + 
     "INNER JOIN MachineGroupList mgl " + 
     "ON (mg.GroupID = mgl.GroupID) " + 
     "INNER JOIN LogFileHeader lfh ON (mgl.MachineID = lfh.FKMachineID) " + 
     "INNER JOIN RegistrationTransactionData rta ON (lfh.PKId = rta.FKLogFileHeader) " + 
     "WHERE [email protected] AND mg.Name NOT IN ('Mains','ALL','ANPR') " + 
     "ORDER BY rta.IDdatetime"; 

     DataTable myDatatable = new DataTable(); 
     SqlConnection myConn = new SqlConnection(); 
     myConn.ConnectionString = connString; 

     SqlCommand myCommand = new SqlCommand(); 
     myCommand.CommandType = CommandType.Text; 
     myCommand.CommandText = stringSql; 
     myCommand.Connection = myConn; 

     SqlDataAdapter myAdapter = new SqlDataAdapter(); 
     myAdapter.SelectCommand = myCommand; 

     myCommand.Parameters.Add("@vrm", SqlDbType.VarChar).Value = vrm_in; 

     myAdapter.Fill(myDatatable); 

     return myDatatable; 
    } 

    private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e) 
    { 
     string[] parameters = (string[])e.Argument; 
     tblVRM = GetDataByVRM(parameters[0]); 
    } 

    private void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     this.dataGridView1.DataSource = tblVRM; 
     this.btnShowForDateRange.Enabled = true; 
     this.btnFindVRM.Enabled = true; 
     this.progressBar1.Visible = false; 
     this.lblCount.Visible = true; 
     this.lblCount.Text = "Count: " + tblVRM.Rows.Count.ToString(); 
     tblDateRange = new DataTable(); 
     btnExport.Enabled = true; 
    } 

回答

0

既然你在“PopulateMachines”清除组合框的项目收集你要添加的项目再次

private void cboMachineGroup_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    //this.cboMachines.Text = ""; 

    PopulateMachineList(); 
    cboMachines.Items.Insert(0, "-ALL MACHINES-"); 
    cboMachines.SelectedIndex = 0; 
} 

第二次尝试:

private void btnShowForDateRange_Click(object sender, EventArgs e) 
{ 

    tblDateRange = new DataTable(); 
    this.btnShowForDateRange.Enabled = false; 
    this.btnFindVRM.Enabled = false; 
    this.progressBar1.Visible = true; 
    btnExport.Enabled = false; 
    cboMachines.Items.Insert(0, "-ALL MACHINES-"); 
    cboMachines.SelectedIndex = 0; 
    string[] parameters = { dtStartDate.Value.ToString("yyyy-MM-dd"), dtEndDate.Value.ToString("yyyy-MM-dd"), this.cboMachineGroup.Text, this.cboMachines.Text }; 
    this.backgroundWorker1.RunWorkerAsync(parameters); 

} 
+0

嗨罗马诺,我尝试过,但我的datagridview当我从cboxMachinegroup中选择,但cbomachine中有全部机器时,它是空的。谢谢 –

+0

嗨Kiran,我不太确定我是否能解决您的问题。在这个问题中,你没有写任何来自DataGridView的东西。你能编辑你的问题,并用代码中的对象名替换cb1,cb2和combobox1,combobox2。真的有助于更好地理解它 –

+0

当我从combobox1中选择时,我只想在combobox2上显示文本(所有机器/总数)。一切代码工作正常。 –

相关问题