2013-07-31 4 views
0

Я хочу удалить выбранную строку в datagridview, а также удалить строку в Mysql.Удалить выбранную строку в datagridview, а также удалить строку в базе данных

private void deleteOrderButton_Click(object sender, EventArgs e) 
{ 
    int selectedIndex = orderDataGridView.CurrentCell.RowIndex; 

    if (selectedIndex > -1) 
    { 
     orderDataGridView.Rows.RemoveAt(selectedIndex); 
     orderDataGridView.Refresh(); 
    } 

    string constring = "datasource=localhost;port=3306;username=admin;password=acw123"; 
    string Query = "delete from database.tem_order where temp_orderID = ???? 
    MySqlConnection conDatabase = new MySqlConnection(constring); 
    MySqlCommand cmdDataBase = new MySqlCommand(Query, conDatabase); 
    MySqlDataReader myReader; 

    conDatabase.Open(); 
    myReader = cmdDataBase.ExecuteReader(); 
    MessageBox.Show("Updated"); 

Я застрял в команде MySql; Кто-нибудь поможет?

+1

Как источник данных сетки? –

+0

Источник данных был из той же таблицы, я выхожу для отображения, и я хочу удалить выбранный элемент в datagrid, а также в базе данных – user2601433

ответ

1

При использовании источника данных в DataGridView вы можете восстановить объект выбранной строки.

DataRow row = (dataGridView.SelectedRows[0].DataBoundItem as DataRowView).Row; 

В строке данных DataRow должен содержаться идентификатор, который позволяет удалить запись в MySQL. Заменить "-имя-столбца ID" с реальным именем столбца

using(MySqlConnection sqlConn = new MySqlConnection("datasource=localhost;port=3306;username=admin;password=acw123")) 
{ 
    sqlConn.Open(); 

    using(MySqlCommand sqlCommand = new MySqlCommand("DELETE FROM tem_order WHERE temp_orderID = " + row["ID-column-name"],sqlConn)) 
    { 
     sqlCommand.ExecuteNonQuery(); 
    } 
} 
+0

как насчет запроса на удаление строки? – user2601433

+0

Взгляните на anwser снова, я добавил образец для запроса на удаление. –

+0

Ошибка произошла Индекс был за пределами допустимого диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: index – user2601433

0

Я надеюсь, что это может помочь

dataGridView1.Rows.RemoveAt (item.Index);

Кстати Вы должны использовать транзакции Scope, чтобы сделать эти два действия мои советы

+0

RemoveAt не возвращает идентификатор, который необходимо выполнить для удаления MySQL. –

+0

Я хочу спросить, какой shoud я набираю в строке запроса базы данных Query = "delete from database.tem_order, где temp_orderID = ???? – user2601433

+0

использовать для цикла do, чтобы получить выбранную строку и назначить как int ordrID = YourDatagrid.Rows [i]. Ячейки [c] .Value и ваш Query = "удалить из database.tem_order, где temp_orderID = ordrID –

0

Вы можете получить OrderID от выбранной ячейки.

 int selectedIndex = orderDataGridView.CurrentCell.RowIndex; 
     String selectedOrderID = ""; 
     if (selectedIndex > -1) 
     { 

      orderDataGridView.Rows.RemoveAt(selectedIndex); 
      //Replace "OrderID" with the column name of the Order's ID 
      selectedOrderID = orderDataGridView.Rows[selectedIndex].Cells["OrderID"].Value.ToString(); 

     } 

Ваш запрос будет выглядеть следующим образом:

 string Query = "delete from database.tem_order where temp_orderID = " + selectedOrderID ; 
     //This is only an example, you should set the params to avoid SQL Injection 

Тогда вы просто удалить и обновить GridView, сделано:

 conDatabase.Open(); 
     myReader = cmdDataBase.ExecuteReader(); 
     orderDataGridView.Refresh(); 
+0

string selectedOrderID = 0; Невозможно неявно преобразовать тип 'int' в 'string' – user2601433

+0

Извините, мне плохо, это должно быть: String selectedOrderID = ""; –

0
DialogResult dr = XtraMessageBox.Show(Global.lk, "Are you sure to Delete this record ?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Information); 

      if (dr.ToString() == "Yes") 
      { 
       int[] selectedRows = gridViewDeduction.GetSelectedRows(); 
       string type_id = gridViewDeduction.GetRowCellValue(selectedRows[0], gridViewDeduction.Columns["TypeId"]).ToString(); 


       if (type_id != "") 
       { 
        string xsql = "DELETE FROM Pay_DeductionTypeMaster WHERE TypeId = " + type_id + " AND CompanyID = " + Global.CompanyID + ""; 
        bool del = Database.ExecuteSQL(xsql); 
        if (!del) 
        { 
         XtraMessageBox.Show(Global.lk, "Unable to delete record.This deduction details is in use.", "Deduction Type");       
         return; 
        } 
        dt.Rows.RemoveAt(gridViewDeduction.FocusedRowHandle); 
       } 
       else 
        dt.Rows.RemoveAt(gridViewDeduction.FocusedRowHandle); 
       dt.AcceptChanges(); 
       gridViewDeduction.RefreshData(); 
0

("удалить из TableName где ID = (' "+ Grid1.Rows [Grid1.CurrentRow.Index] .Cells [" ID "]. Значение +"'); "); // получить значение выбранной ячейки

+1

Пожалуйста, отформатируйте его правильно и добавьте некоторое описание. – Sid