2009-04-23 4 views
1

У меня есть DataGridView, связанный с набором объектов.Удалить выбранную строку из DataGridView

Я хочу сделать кнопку «Удалить» в форме, чтобы пользователь мог удалить выбранную строку.

Но есть проблема, если выбрана новая строка (специальная последняя строка в сетке). Если я выберу новую строку и затем попытаюсь нажать кнопку «Удалить», сетка теряет фокус и изменяет выбранную строку! Он отображает последнюю строку (одну перед новой строкой). Таким образом, в обработчике кнопки «Удалить» уже выбрана еще одна строка, а не новая строка!

Как я могу решить эту проблему, кроме скрытия этой специальной новой строки (AllowUserToAddRows = false) и создания моей собственной кнопки «Добавить» и кода для нее?

ответ

2

Вы можете отключить кнопку Delete, когда недействительная строка (т.е. специальной новой строки) выбираются

0

Private Sub btnDelete_Click (ByVal отправителя Как System.Object, ByVal е Как System.EventArgs) Ручки btnDelete.Click

Dim gr As New DataGridViewRow 
    For Each gr In DataGridView1.SelectedRows 
     ds.Tables(0).Rows(gr.Index).Delete() 
    Next 
    ds.AcceptChanges() ' Accept Changes 
    DataGridView1.Rows.Clear() 
    lbltest.Text = "" 
    calldata(ds) ' this function is as follow 
    'Public Function calldata(ByRef DS As DataSet) 
    ' Dim i As Integer = 0 
    ' Dim dr As DataRow 
    ' Dim dc As DataColumn 
    ' For Each dr In DS.Tables(0).Rows 'dt.Rows 
    '  Dim j As Integer = 0 
    '  DataGridView1.Rows.Add() 
    '  For Each dc In DS.Tables(0).Columns 'dt.Columns 
    '   DataGridView1.Rows(i).Cells(j).Value = dr(dc).ToString() 
    '   lbltest.Text = lbltest.Text & " : " & dr(dc).ToString() 
    '   j = j + 1 
    '  Next 
    '  i = i + 1 
    ' Next 

    'End Function 
    ' the above code only update your dataset not actual data 
End Sub