Почему SQLCommandBuider не удаляется? - PullRequest
0 голосов
/ 05 октября 2011

В следующем коде UPDATE работает, но DELETE не работает. Когда я удаляю строку, он удаляется, и GridView1 не показывает его, но база данных все еще имеет его. customers имеет PrimaryKey.

using (SqlConnection connection = new SqlConnection(conString))
        {
            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = new SqlCommand("select * from customers", connection);
            SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
            connection.Open();
            DataTable customers = new DataTable();
            adapter.Fill(customers);
            // code to modify data in DataTable here
        customers.Rows.RemoveAt(rowIndex);
            GridView1.EditIndex = -1;
            GridView1.DataSource = customers;
            GridView1.DataBind();
            adapter.Update(customers);

1 Ответ

1 голос
/ 05 октября 2011

Вы не хотите удалять строку из DataTable, но удалите it.

Значение DataRow DataRowState должно быть изменено на deleted, затемDataAdapter знает, что он должен удалить его в источнике данных.

Следующее удалит его:

customers.Rows(rowIndex).delete();//now DataRow's DataRowState is Deleted
adapter.Update(customers);        // now it's actually deleted

Дополнительная информация: MSDN Как: удалить строки в DataTable

Кстати, следующее будетзапретите удаление DataRow, если вы передумали:

customers.Rows(rowIndex).RejectChanges();

RowState вернется к Unchanged.Это работает либо для DataRow , либо для целых DataTable .

...