Добавленная строка исчезает при нажатии или выборе ячейки в DaTagridview - PullRequest
0 голосов
/ 11 марта 2020

Я добавляю строку в Dgw для суммы из столбцов, но когда я нажимаю на Dgw или выбираю ячейку, строка исчезает.

Я использую базу данных Sqlite.

Это код:

    Private Sub ComboPontes_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboPontes.SelectionChangeCommitted

    Dim dbPonte As LaPonte = CType(ComboPontes.SelectedItem, LaPonte)
    Dim dt = Opst.NetSevragesByPonte(dbPonte.PonteID)
    If dbPonte.PonteID > -1 Then
        _bsSEVPonte1.DataSource = dt
        Dgd1.DataSource = _bsSEVPonte1
        For Each column As DataGridViewColumn In Dgd1.Columns
            column.HeaderText = column.HeaderText.SplitCamelCase()
        Next
        Dgd1.ExpandColumns()

        Dim Sum As Integer = 0
        Dim Sum1 As Integer = 0
        ' Sum
        For i As Integer = 0 To dt.Rows.Count - 1
            Sum += If(Not Convert.IsDBNull(Dgd1.Rows(i).Cells(3).Value), Convert.ToInt32(Dgd1.Rows(i).Cells(3).Value), 0)
            Sum1 += If(Not Convert.IsDBNull(Dgd1.Rows(i).Cells(4).Value), Convert.ToInt32(Dgd1.Rows(i).Cells(4).Value), 0)
        Next
        Dim dr As DataRow = dt.NewRow
        dt.Rows.Add(dr)
        For Each col As DataColumn In dt.Columns
            col.[ReadOnly] = False
        Next
        Dgd1("Race", Dgd1.Rows.Count - 1).Value = "TOTAL"
        Dgd1("OiseauxSevrés", Dgd1.Rows.Count - 1).Value = Sum
        Dgd1("NetOiseauxSevrés", Dgd1.Rows.Count - 1).Value = Sum1

end sub

Большое спасибо.

1 Ответ

0 голосов
/ 12 марта 2020

Я думаю, что проблема здесь:

Dgd1("Race", Dgd1.Rows.Count - 1).Value = "TOTAL"
Dgd1("OiseauxSevrés", Dgd1.Rows.Count - 1).Value = Sum
("NetOiseauxSevrés", Dgd1.Rows.Count - 1).Value = Sum1

Кажется, что ваше представление данных связано с данными , но здесь вы пытаетесь обновить сетку напрямую. Так что твои изменения не прилипают. Что вам нужно сделать, это обновить базу данных или еще лучше, вы можете использовать bindingsource .

Чтобы добавить новую строку, вы можете сделать так:

Dim dr As DataRow = dt.NewRow()
With dr
    .Item("Field1") = "Value1"
    .Item("Field2") = "Value2"
    .Item("Field3") = "Value3"
End With
dt.Rows.Add(dr)

Или более короткое событие: добавьте значения для каждого поля в строке:

dt.Rows.Add("Value1", "Value2", "Value3")

Но пользователь может щелкнуть столбцы, чтобы изменить порядок сортировки, или даже перетащить столбцы, чтобы изменить их положение. Таким образом, вам может понадобиться придумать какой-нибудь трюк, чтобы сохранить желаемый макет. Может быть скрытый ключ сортировки или что-то еще. Я бы, вероятно, держал промежуточные итоги вне таблицы данных, хотя . Почему бы не использовать метки или строку состояния в нижней части формы?

Я бы просто пересчитал промежуточные итоги при изменении базовых данных. Например, вы можете выполнить вычисления с помощью функции Compute .

. Если вы пытаетесь суммировать столбцы, вам может пригодиться функция DataColumn.Expression .

...