powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перенести изменения из datagridwiev в datatable
1 сообщений из 1, страница 1 из 1
Перенести изменения из datagridwiev в datatable
    #39201960
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Помогите пожалуйста советом.
Есть Datagridview, у которого в качестве datasource выступает datatable, заполненная из базы

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
 Dim command As New SqlCommand(queryString, con)
 con.Open()
 Dim reader As SqlDataReader = command.ExecuteReader()
 dt = New DataTable
 dt.Load(reader)

------------
Datagridview.DataSource = dt



К событию Datagridview_CellEndEdit прикреплен обработчик события, который фиксирует изменения Datagridview в базе данных. Здесь все нормально.
Далее к форме я решил сделать фильтр следующим образом:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Dim dt_filter As New DataTable
            Dim str_filter As String = Me.find_cmb.SelectedValue & " like '%" & Me.txt_find.Text & "%'"

            Dim foundRows() As DataRow = dt.Select(str_filter)

               dt_filter.Columns.AddRange(New DataColumn() {
                New DataColumn With {.ColumnName = "fld_1", .Caption = "fld_1", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_2", .Caption = "fld_2", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_3", .Caption = "fld_3", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_4", .Caption = "fld_4", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_5", .Caption = "fld_5", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_6", .Caption = "fld_6", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_7", .Caption = "fld_7", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_8", .Caption = "fld_8", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_9", .Caption = "fld_9", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_10", .Caption = "fld_10", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_11", .Caption = "fld_11", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_12", .Caption = "fld_12", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_13", .Caption = "fld_13", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_14", .Caption = "fld_14", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_15", .Caption = "fld_15", .DataType = GetType(Boolean)},
                New DataColumn With {.ColumnName = "fld_16", .Caption = "fld_16", .DataType = GetType(Boolean)},
                New DataColumn With {.ColumnName = "fld_17", .Caption = "fld_17", .DataType = GetType(Boolean)},
                New DataColumn With {.ColumnName = "fld_18", .Caption = "fld_18", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_19", .Caption = "fld_19", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_20", .Caption = "fld_20", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_21", .Caption = "fld_21", .DataType = GetType(String)},
                New DataColumn With {.ColumnName = "fld_22", .Caption = "fld_22", .DataType = GetType(String)}
            })


            If foundRows IsNot Nothing Then
                For Each foundRow As DataRow In foundRows
                    Dim nw_row As DataRow = dt_filter.NewRow()
                    dt_filter.ImportRow(foundRow)
                Next foundRow
            End If



            With Me.Datagridview
                .DataSource = dt_filter
            End With



Смысл фильтра в том, чтобы фильтрацию осуществлял клинет программы, а не БД.
Проблема: когда я редактирую Datagridview, то обработчик события обрабатывает корректно, все изменения в БД видны. Не видны изменения в datatable для Datagridview (Datagridview.DataSource = dt) и получается если отредактировать Datagridview, потом сделать фильтр, то изменения пропадают. Появляются только после перезагрузки из БД.

Что было попробовано и не помогло:

вместе с обработчиком события Datagridview_CellEndEdit вызывать метод
Код: vbnet
1.
dt.AcceptChanges



привязывать источник данных Datagridview через bindingsource.

Понимаю, что есть костыль в виде поиска по datatable и его "ручного" редактирования значения, но может кто-то подскажет более годное решение? Спасибо

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перенести изменения из datagridwiev в datatable
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]