Datarepeater удаляет только удаление верхней записи

#c# #datarepeater

#c# #datarepeater

Вопрос:

У меня есть datarepeater, и следующий код удаляет ТОЛЬКО ПЕРВУЮ запись, независимо от того, какая из них выбрана. Я не совсем уверен, что это правильный способ сделать это с помощью datarepeater, но я не смог найти лучшего решения. Мне нужно иметь возможность выбрать любую запись и удалить ее.

     //delete document
    private void cmdDeleteDoc_Click(object sender, EventArgs e)
    {

        if (this.dataRepeater1.CurrentItemIndex == 0)
        {

            //begin reset
            this.dataRepeater1.BeginResetItemTemplate();
            // Delete Row Here

            DataClasses1DataContext db = new DataClasses1DataContext();

            System.Data.DataRowView SelectedRowView;
            newCityCollectionDataSet.DocumentsRow SelectedRow;

            SelectedRowView = (System.Data.DataRowView)documentsBindingSource.Current;
            SelectedRow = (newCityCollectionDataSet.DocumentsRow)SelectedRowView.Row;


            var matchedDocument = (from c in db.GetTable<Document>()
                                   where c.DocIDKey == SelectedRow.DocIDKey
                                   select c).SingleOrDefault();

            db.Documents.DeleteOnSubmit(matchedDocument);
            db.SubmitChanges();

            LoadCaseNumberKey(matchedDocument.CaseNumberKey, false, "documents");
            this.dataRepeater1.EndResetItemTemplate();
        }


    }
  

Любая помощь была бы отличной!.

Комментарии:

1. почему эта строка if (this.dataRepeater1.CurrentItemIndex == 0) ?

2. @Mika В этой строке нет необходимости, вы правы. Это было там, потому что я скопировал это с другой кнопки, в которой должен быть currentitem, чтобы функционировать. Также я не хочу, чтобы это срабатывало, если также нет записи.

Ответ №1:

Я предполагаю, что вы перепутались между вашим documentsBindingSource и вашим dataRepeater .

То, что вы «видите» визуально, — это DataRepeater, в то время как то, что вы «получаете», — это documentsBindingSource.Current (который вы извлекаете как существующий SelectedRowView )
, для которого всегда установлен индекс 0. Это слишком распространенная ошибка управления Winforms.

Комментарии:

1. Спасибо! На самом деле я только что исправил проблему, используя кнопку удаления в навигаторе привязки.