2013-03-03 2 views
1

Я развиваюсь, и мне нужен подробный ответ, извините за мой плохой английский ... Я постараюсь объяснить себе все, что могу. . Я 2 таблицы в MysqlC# Измените ячейку в Mysql с помощью ComboBox в DataGridView

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

в моем приложении я использую всю информацию внутри table1, чтобы заполнить DataGridView, также я добавил колонку COMBOBOX, выпадающий список отображает «status_name» от table2, я хотите изменить ticket_status с информацией, содержащейся в comboBox, как я могу это сделать?

это мой код:

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, но я не уверен, как это сделать, или, может быть, с помощью кнопки для обновления информации, но как я могу получить указанную строку для combobox, которая была модифицированный? –

ответ

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, есть способ запустить ее немедленно, не нажимая на другая ячейка? –

+0

Я не уверен, но, вероятно, вам нужно подтвердить редактирование ячейки, нажав enter (или покинув эту ячейку). Он работает, поскольку он работает, потому что свойство Value ячейки изменяется после того, как вы подтвердите редактирование значения (клавишей ввода) или когда вы покидаете ячейку. Возможно, его можно назвать этим событием сразу после сбора стоимости, но я не знаю, как это сделать. Может быть, это хороший вопрос для другого вопроса. – Kamil

+0

Я предлагаю задать другой вопрос, может быть, что-то вроде этого: «Как обновить значение DataGridViewComboBoxCell, не выходя из ячейки или нажав клавишу ввода?» – Kamil

Смежные вопросы