2013-03-03 78 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

相关问题