Как редактировать записи базы данных в DataGridView, используя LINQ to SQL? - PullRequest
0 голосов
/ 12 апреля 2009

Я так близок к этому, но мне нужна небольшая помощь. У меня есть простое приложение WinForms, которое использует LINQ to SQL для сбора данных, которые необходимо просмотреть из базы данных, и помещения их в DataGridView. Эта часть прекрасно работает, но я не могу установить связь с тем, как вернуть данные в базу данных, когда все изменится.

Вот что у меня есть:

db = new SiteDataDataContext();
src = new BindingSource();
src.DataSource = GetSitesPendingApproval(); // Returns IQueryable<Site>.
dataGridView1.DataSource = src;
dataGridView1.AllowUserToDeleteRows = true;
dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;

У меня есть два действия, которые я хочу выполнить:

  1. Когда checkbox для значения boolean IsActive (DataGridView.Columns [7]) отмечен / снят, я хочу, чтобы изменения были отправлены в базу данных.
  2. Когда запись удаляется из datagridview, я хочу, чтобы она также удалялась из базы данных.

Я, очевидно, пропускаю какой-то обработчик событий привязки, отправки, слияния, добавления или изменения ячейки, но я не смог выяснить соединение для отправки изменений обратно. Если проще просто внести все изменения, а затем нажать какую-то кнопку отправки, чтобы отправить все обратно, это тоже хорошо.

1 Ответ

1 голос
/ 12 апреля 2009

Вы пытались добавить обработчик события для события UserDeletingRow, который использует идентификатор в строке для удаления строки из базы данных?

private void DataGrid_UserDeletingRow(object sender,
                                           DataGridCommandEventArgs e)
{
    TableCell itemCell = e.Item.Cells[0]; // assumes id is in column 0

    int id = int.Parse(item.Text); // assumes it's non-null

    using (var dc = new SiteDataDataContext())
    {
         var site = dc.Sites.Where(s => s.ID == id).SingleOrDefault();

         if (site != null)
         {
             try
             {
                dc.Sites.DeleteOnSubmit( site );
                dc.SubmitChanges();
                dataGridView1.Bind();
             }
             catch (SqlException)
             {
                e.Cancel = true;
             }
         }
     }
}

Вы также можете предоставить сообщение об ошибке, если удаление не удалось, но то, как вы это сделаете, будет зависеть от вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...