В моем приложении WinForms мне нужно одновременно удалить выбранные строки из представления сетки данных, а также из моей базы данных и сохранить базу данных.
У меня есть этот код ниже, где теперь он удаляется только из datagridview, но не из базы данных, пожалуйста, подскажите, где я ошибаюсь.
private void button1_Click(object sender, EventArgs e)
{
try
{
String msg = "Confirm Delete?";
String caption = "Delete Record";
MessageBoxButtons buttons = MessageBoxButtons.YesNo;
MessageBoxIcon ico = MessageBoxIcon.Question;
DialogResult result;
result = MessageBox.Show(this, msg, caption, buttons, ico);
if (result == DialogResult.Yes)
{
foreach (DataGridViewRow item in this.iP_SpoolsDataGridView.SelectedRows)
{
using (SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd = con.CreateCommand();
int id = Convert.ToInt32(iP_SpoolsDataGridView.SelectedRows[0].Cells[0].Value);
cmd.CommandText = "Delete from Lot_Numbers where ID='" + id + "'";
iP_SpoolsDataGridView.Rows.RemoveAt(this.iP_SpoolsDataGridView.SelectedRows[0].Index);
con.Open();
cmd.ExecuteNonQuery();
}
}
}
else
{
return;
}
}
catch (Exception ex)
{
MessageBox.Show("Deleting Failed:" + ex.Message.ToString(), "Delete",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Попробуй это:
private void button1_Click(object sender, EventArgs e)
{
try
{
String msg = "Confirm Delete?";
String caption = "Delete Record";
MessageBoxButtons buttons = MessageBoxButtons.YesNo;
MessageBoxIcon ico = MessageBoxIcon.Question;
DialogResult result;
result = MessageBox.Show(this, msg, caption, buttons, ico);
if (result == DialogResult.Yes)
{
int id = 0;
foreach (DataGridViewRow item in this.iP_SpoolsDataGridView.SelectedRows)
{
id = Convert.ToInt32(item.Cells[0].Value.ToString());
if (Database_Remove_LotNumberById(id))
{
iP_SpoolsDataGridView.Rows.RemoveAt(item.Index);
}
}
}
else
{
return;
}
}
catch (Exception ex)
{
MessageBox.Show("Deleting Failed:" + ex.Message.ToString(), "Delete",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//The code become clean if you separate the Database Operations
private bool Database_Remove_LotNumberById(int IdLotNumber)
{
bool IsRemovedFromDatabase = false;
try
{
using (SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = "Delete from Lot_Numbers where ID= @ID";
cmd.Parameters.AddWithValue("@ID", IdLotNumber);
con.Open();
cmd.ExecuteNonQuery();
IsRemovedFromDatabase = true;
}
}
catch (SqlException ex)
{
// Handle the SQL Exception as you wish
MessageBox.Show("Deleting Failed:" + ex.Message.ToString(), "Delete", MessageBoxButtons.OK, MessageBoxIcon.Error);
//or throw
}
return IsRemovedFromDatabase;
}
Для получения качественных ответов, пожалуйста, объясните, что именно вы изменили, в дополнение к предоставлению кода.
он выдает исключение?. если да, то какое исключение?