#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. Спасибо! На самом деле я только что исправил проблему, используя кнопку удаления в навигаторе привязки.