Удаление строки из базы данных и вида сетки в wpf - PullRequest
1 голос
/ 17 августа 2011

Я хочу удалить строку из gridview и базы данных - я пишу некоторый код, но этот код просто удаляет первую строку моего gridview!Пожалуйста, помогите мне.Я использовал Entity Framework и wpf C #.

using (AccountingEntities cntx = new AccountingEntities())
{
   Producer item = this.grdProducers.SelectedItem as Producer;
   cntx.DeleteObject(cntx.Producers.First(x => x.ID == item.ID));
   cntx.SaveChanges();
   dataPager.Source = cntx.Producers.ToList();
}

Ответы [ 2 ]

0 голосов
/ 28 августа 2011

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

            int unitTypeId = (this.grdUnitTypes.SelectedItem as UnitType).ID;
            ConfirmWindowResult result = Helpers.ShowConfirm(this, SR.GlobalMessages.AreYouSureToDelete, SR.GlobalMessages.Warning);
            if (result == ConfirmWindowResult.Yes)
            {
                using (AccountingEntities cntx = new AccountingEntities())
                {
                    try
                    {
                        cntx.UnitTypes.DeleteObject(cntx.UnitTypes.First(x => x.ID == unitTypeId));
                        cntx.SaveChanges();
                        dataPager.Source = cntx.UnitTypes.ToList();
                        MessageBox.Show("Success");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error");
                    }
                    finally
                    {
                        cntx.Dispose();
                    }
                }
            }
0 голосов
/ 18 августа 2011

Может быть, вам стоит просто попробовать:

cntx.DeleteObject(cntx.Producers.where(x => x.ID == item.ID));

// if you get my .where() code to return the entity's index you'll should be fine

Это должно вызвать соответствующую лямбду / linq. Поскольку вы используете «where», выражение применяется к каждому «Producer» -Entity x, соответствующему item.ID

UPDATE:

Из MSDN:

Удаляет запись по указанному индексу из источника данных.

DeleteObject(int rowIndex)

Ну, это многое объясняет. Потому что это означает, что вы просто передаете неверный аргумент. Вам необходимо перебрать всю Grid с помощью foreach или for и удалить каждую сущность с помощью deleteObject и проверить, прежде чем идентификатор объекта соответствует item.ID.

Я уверен, что это будет проще, если использовать Lambda / LINQ, но в настоящее время я понятия не имею, как это можно сделать иначе.

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

http://www.asp.net -crawler.com / статьи / LINQ / Insert-получить-обновление-удаление-через-GridView-используя-LINQ к SQL.aspx

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