2013-03-03 28 views
1

我正在開發新內容,我需要一個詳細的答案,我很抱歉我的英語不好...... 我會盡我所能解釋自己。 。 我有2代表在MySQLc#使用DataGridView中的組合框修改Mysql中的單元格

table1: id_ticket , ticket_description, ticket_status(id_status)   
table2 : id_statu , status_name 

在我的應用程序裏面使用table1的所有信息填寫一個DataGridView,也是我添加了一個組合框列,從表2的組合框顯示「status_name」,我想用包含在組合框中的信息修改ticket_status,我該怎麼做?

這是我的代碼:

public void CreateAssignedToMe(string ConnString) 
    { 
     string assignedTo = textBoxUid.Text; 
     string query = "SELECT * FROM reports WHERE ticket_assignee='"+assignedTo+"' AND ticket_resolution < 3;"; 

     AssignToMe = new AssignedToMe(); 
     AssignToMe.ConnString = ConnString; 
     DataGridView dgvReports = AssignToMe.dataGridViewAssignedToMe; 

     try 
     { 
      MySqlConnection conn = new MySqlConnection(ConnString); 
      conn.Open(); 
      MySqlDataAdapter daUsers = new MySqlDataAdapter(query,ConnString); 
      DataSet dsUsers = new DataSet(); 
      daUsers.Fill(dsUsers,"report"); 
      dgvReports.DataSource = dsUsers; 
      dgvReports.DataMember = "report"; 
      dgvReports.AllowUserToAddRows = false; 
      dgvReports.AllowUserToDeleteRows = false; 
      dgvReports.Columns["ticket_departmentResponsive"].Visible = false; 
      dgvReports.Columns["ticket_assignee"].Visible = false; 


       string queryStatus = "SELECT * FROM status"; 
       MySqlDataAdapter daStatus = new MySqlDataAdapter(queryStatus, ConnString);     
       DataSet dsStatus = new DataSet(); 
       MySqlCommandBuilder builder = new MySqlCommandBuilder(daStatus); 
       daStatus.Fill(dsStatus, "Resolution"); 

       daStatus.UpdateCommand = builder.GetUpdateCommand(); 

       DataGridViewComboBoxColumn cbbox = new DataGridViewComboBoxColumn(); 
       BindingSource StatusBindingSource = new BindingSource(); 
       StatusBindingSource.DataSource = dsStatus; 
       StatusBindingSource.DataMember = "Resolution"; 
       cbbox.HeaderText = "Resolution"; 
       cbbox.DropDownWidth = 90; 
       cbbox.DataSource = StatusBindingSource; 
       cbbox.DisplayMember = "status_name"; 
       dgvReports.Columns.Add(cbbox); 



      AssignToMe.ShowDialog(); 

     } 
     catch(MySqlException ex) 
     { 
      MessageBox.Show(ex.Message.ToString()); 
     } 

}

我不能發表圖片:(

+0

我認爲我必須使用類似於EventHandler的東西,但我不知道該怎麼做,或者可能使用按鈕來更新信息,但我如何才能獲得組合框的指定行改性? – 2013-03-03 13:38:19

回答

0

您必須添加DataGridView.CellValueChanged Event分配給該事件的功能將被執行時。你改變任何單元格值

// adding event handler (somewhere after dgvReports initialization) 
dgvReports.CellValueChanged += new DataGridViewCellEventHandler(dgvReports_CellValueChanged); 

// function that handles event 
private void dgvReports_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    // `e` argument will contain e.RowIndex and e.ColumnIndex properties 
    // they may be used to determine which particular cell was changed 

} 

在事件處理程序中,你應該檢查什麼列/單元格被更改(行和單元格索引應通過DataGridViewCellEventArgs e參數傳遞給處理CellValueChanged事件的方法)。

之後檢查 - 你應該「做你的更新」。

+0

感謝您的回答,現在我可以做我想做的事,只需要一個問題,每次修改單元格時,我都必須點擊其他單元格才能運行dgv_Reports_CellValueChanged,有一種方法可以立即運行它,而無需單擊其他細胞? – 2013-03-03 15:15:59

+0

林不知道,但可能你必須通過按enter(或離開該單元格)確認單元格編輯。它的工作原理是因爲在「確認值編輯」(通過回車鍵)或離開單元格後單元格的值屬性發生了變化。也許有可能在挑選價值後立即調用該事件,但我不知道如何去做。也許這是另一個問題的好主題。 – Kamil 2013-03-03 15:57:27

+0

我建議問另一個問題,可能是這樣的:「如何更新DataGridViewComboBoxCell值而不離開單元格或按回車?」 – Kamil 2013-03-03 16:02:05

相關問題