vb. net индексирование строки выбранной ячейки - PullRequest
0 голосов
/ 26 марта 2020

я показываю свою таблицу в сетке данных, затем я хочу обновить эту таблицу из самой сетки. Я использую этот код, но эта ошибка постоянно показывает, что класс 'System. Windows .Forms.DataGridViewRow' не может быть проиндексирован, поскольку он не имеет свойства по умолчанию.

Private Sub edit()
    Dim cnx As New MySqlConnection("datasource=localhost;database=bdgeststock;username=root;password=")
    Dim cmd As MySqlCommand = cnx.CreateCommand
    Dim resultat As Integer
    Dim req As String = "UPDATE utilisateur  SET @col = @val where idu=@id"
    If grid.CurrentCell.ColumnIndex = 1 Then
        MessageBox.Show("error u cant edit ids")
    Else
        If ConnectionState.Open Then
            cnx.Close()
        End If
        cnx.Open()
        cmd.Parameters.AddWithValue("@col", grid.CurrentCell.ColumnIndex)
        cmd.Parameters.AddWithValue("@val", grid.CurrentCell.Value)
        cmd.Parameters.AddWithValue("@id", grid.CurrentRow(0))
        cmd.CommandText = req
        resultat = cmd.ExecuteNonQuery
        If (resultat = 0) Then
            MessageBox.Show("error")
        Else
            MessageBox.Show("success")
        End If
        grid.EndEdit()
        grid.RefreshEdit()
        grid.ReadOnly = True
        cnx.Close()
        cmd.Dispose()
    End If

End Sub

1 Ответ

2 голосов
/ 26 марта 2020

Вызов grid.CurrentRow(0) не сработает. grid.CurrentRow возвращает datagridviewrow, но, как говорится в сообщении об ошибке, это не может быть проиндексировано (означает «не может быть числа в скобках после него»), поскольку оно не имеет свойства по умолчанию (означает свойство, которое возвращается, когда разработчик использует только название). Некоторые вещи имеют свойства по умолчанию; например, DataRow (из таблицы данных) имеет свойство .Items, представляющее значения столбцов. .Items - это свойство по умолчанию, означающее, что myDatarow.Items(7) и myDataRow(7) делают одно и то же. DataGridViewRow не имеет ни одного из своих свойств, помеченных как свойства по умолчанию, поэтому вам нужно указать одно из его свойств

Возможно, вы имели в виду

grid.CurrentRow.Cells(0).Value

Сейчас самое время упомянуть что это не тот способ, которым MS намеревался использовать представление данных. Было бы лучше связать вашу сетку с датируемой таблицей, а затем вытащить нужные элементы данных из таблицы данных.

Вы также можете, если ваша сетка связана с данными:

DirectCast(grid.CurrentRow.DataBoundItem, DataRowView)(0)

Я бы порекомендовал убедиться, что вы не разрешаете пользователю изменять порядок столбцов в DGV. Если вы это сделаете, то рассмотрите одно из:

grid.CurrentRow.Cells("id").Value

DirectCast(grid.CurrentRow.DataBoundItem, DataRowView)("id")
...