powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / События DataGrid.
22 сообщений из 22, страница 1 из 1
События DataGrid.
    #32637485
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть DataGrid, заполняемый из таблицы через DataSourse.
Вопрос какие события DataGrid происходят при удалении, добавлении и редактировании строк в DataGrid?
...
Рейтинг: 0 / 0
События DataGrid.
    #32637661
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отлавливать события надо не у DataGrid. Так как DataGrid это у нас элемент UI.
А как вы посредством только DataGrid удаляете запись ?

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
События DataGrid.
    #32638040
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удаляю так:
Код: plaintext
1.
Me.BindingContext(dg.DataSource).RemoveAt(Me.BindingContext(dg.DataSource).Position)
...
Рейтинг: 0 / 0
События DataGrid.
    #32638281
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подписывайтесь на события RowDeleting , RowDeleted , RowChanging , RowChanged своего экземпляра класса DataTable в которых и производите все необходимые действия.

Кстати что вы собираетесь делать?

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
События DataGrid.
    #32638514
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь не знаю:)

Вообщем на основной форме есть DataGrid с фамилией Именем Отчеством, заполняемый из таблицы через DataSourse.Есть кнопки New,Edit принажатии на которые открывается форма для редактирования текущего или вставки нового сотрудника.Т.е. при нажатии ОК на этой форме вставляется новая или редактируется выбранная строка в таблице с которой связан DataGRid, что отражается в DataGrid.
Еще на основной форме есть текстовое поле содержащее значение Фио сотрудника, заполняемое спомощью процедуры:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
loadAdres(txtGenDir, "SotrudnTip = 'генеральный директор' ", "ContragentSotrudnTbl", "FIO")
.
.
.
Public Shared Sub loadAdres(ByVal txt As TextBox, ByVal selStr As String, ByVal tabname As String, ByVal itemname As String)

        Dim selectedRows() As DataRow

        selectedRows = CompanyForm.dsCompany.Tables(tabname).Select(selStr & "AND CompanyContragentId = " & CompanyForm.selRow("CompanyContragentId"))
        If selectedRows.Length =  0  Then
            txt.Text = "N/A"
        Else
            txt.Text = RTrim(selectedRows( 0 ).Item(itemname))
        End If
        txt.ReadOnly = True
    End Sub
Вопрос был в том, как обновить значение в текстовом поле, если произошло изменение в DataGrid(т.е. в таблице). Сначала хотел повесить вызов этой процедуры на события изменения в таблице, но не аккуратно както...
Возможно нужно использовать DataBinding, но при попытке использовать следующий код:
Код: plaintext
1.
txtGenDir.DataBindings.Add("text", CompanyForm.dsCompany.Tables("ContragentSotrudnTbl"), "FIO")
При первом открытии формы вроде нормально, а при повторном открытии пишет что в коллекции уже есть такой databindings и выдается исключение.
...
Рейтинг: 0 / 0
События DataGrid.
    #32638547
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dencat
Возможно нужно использовать DataBinding, но при попытке использовать следующий код:
txtGenDir.DataBindings.Add("text", CompanyForm.dsCompany.Tables("ContragentSotrudnTbl"), "FIO")
При первом открытии формы вроде нормально, а при повторном открытии пишет что в коллекции уже есть такой databindings и выдается исключение.

Чтобы избавиться от исключения, то можно очистить DataBindings
Код: plaintext
1.
txtGenDir.DataBindings.Clear()

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
События DataGrid.
    #32638589
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо сейчас попробую.
...
Рейтинг: 0 / 0
События DataGrid.
    #32638834
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос, а какое событие происходит при вставке новой строки в таблицу?
Все таки сделал пока с событиями:
Код: plaintext
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.
AddHandler CompanyForm.dsCompany.Tables("ContragentAdrTbl").RowDeleted, New DataRowChangeEventHandler(AddressOf onTabDelete)

AddHandler CompanyForm.dsCompany.Tables("ContragentAdrTbl").ColumnChanged, New DataColumnChangeEventHandler(AddressOf onTabChange)
.
.
.
Private Sub onTabChange(ByVal sender As Object, ByVal e As DataColumnChangeEventArgs)
         'Для поля юридический адрес. 
        loadAdres(txtUrAdr, "adrtipid = 'юридический' ", "ContragentAdrTbl", "SumAdr")
         'Для поля физический адрес. 
        loadAdres(txtFizAdr, "adrtipid = 'физический' ", "ContragentAdrTbl", "SumAdr")
         'Для поля адрес банка. 
        loadAdres(txtBankAdr, "adrtipid = 'банк' ", "ContragentAdrTbl", "SumAdr")

    End Sub

        Private Sub onTabDelete(ByVal sender As Object, ByVal e As DataRowChangeEventArgs)

         'Для поля юридический адрес. 
        loadAdres(txtUrAdr, "adrtipid = 'юридический' ", "ContragentAdrTbl", "SumAdr")
         'Для поля физический адрес. 
        loadAdres(txtFizAdr, "adrtipid = 'физический' ", "ContragentAdrTbl", "SumAdr")
         'Для поля адрес банка. 
        loadAdres(txtBankAdr, "adrtipid = 'банк' ", "ContragentAdrTbl", "SumAdr")

    End Sub
.
.
.
Public Shared Sub loadAdres(ByVal txt As TextBox, ByVal selStr As String, ByVal tabname As String, ByVal itemname As String)

        Dim selectedRows() As DataRow

        selectedRows = CompanyForm.dsCompany.Tables(tabname).Select(selStr & "AND CompanyContragentId = " & CompanyForm.selRow("CompanyContragentId"))
        If selectedRows.Length =  0  Then
            txt.Text = "N/A"
        Else
            txt.Text = RTrim(selectedRows( 0 ).Item(itemname))
        End If
        txt.ReadOnly = True
    End Sub
...
Рейтинг: 0 / 0
События DataGrid.
    #32639236
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub onTabChange(ByVal sender As Object, ByVal e As DataColumnChangeEventArgs)
        if e.Row.RowState = DataRowState.Added  Then
              MsgBox("Добавленная запись")
        End If
         'Для поля юридический адрес. 
        loadAdres(txtUrAdr, "adrtipid = 'юридический' ", "ContragentAdrTbl", "SumAdr")
         'Для поля физический адрес. 
        loadAdres(txtFizAdr, "adrtipid = 'физический' ", "ContragentAdrTbl", "SumAdr")
         'Для поля адрес банка. 
        loadAdres(txtBankAdr, "adrtipid = 'банк' ", "ContragentAdrTbl", "SumAdr")
End Sub
...
Рейтинг: 0 / 0
События DataGrid.
    #32639673
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, чего-то у меня в пятницу был "не день Бэкхэма"...
...
Рейтинг: 0 / 0
События DataGrid.
    #32639679
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не получается, при добавлении записи сообщение не выскакивает...
Хотя направление копания вроде понятно...
...
Рейтинг: 0 / 0
События DataGrid.
    #32639688
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это сообщение всплывет, когда реально закончится редактирование новой записи (например, будет выбрана в гриде др. запись)

отловить начало редактирования новой записи возможно, но несколько иными средствами.
...
Рейтинг: 0 / 0
События DataGrid.
    #32639947
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не сторонник использования DataGrid для добавления, редактирования записей. Но в данном случае можно выкрутиться следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 ' подпишемся на PositionChanged 
AddHandler Me.BindingContext(dg.DataSource).PositionChanged, AddressOf MyPositionChanged

Public Sub MyPositionChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    If Me.BindingContext(Me.dg.DataSource).Count > CompanyForm.dsCompany.Tables("ContragentAdrTbl").Rows.Count Then 
        MsgBox("this is new record")
    End If
End Sub

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
События DataGrid.
    #32640023
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, сейчас попробуем.
...
Рейтинг: 0 / 0
События DataGrid.
    #32640029
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в DataGrid записи не редактируются, записи редактируются в специальной форме, которая открывается при двойном клике на строке в DataGrid, или при нажатии кнопки Edit.
...
Рейтинг: 0 / 0
События DataGrid.
    #32640046
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно ли сделать так, что-бы при нажатии кнопки OK на модальной форме(подчиненной) после ее закрытия, выполнялась-бы процедура на главной форме?
...
Рейтинг: 0 / 0
События DataGrid.
    #32640268
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dencat
А можно ли сделать так, что-бы при нажатии кнопки OK на модальной форме(подчиненной) после ее закрытия, выполнялась-бы процедура на главной форме?


Можно, например такой код в главной форме.
Код: plaintext
1.
2.
3.
4.
5.
6.
Dim modal as ModalForm = new ModalForm()
Dim result As System.Windows.Forms.DialogResult
result = modal.ShowDialog(Me)  ' Открыли модальную форму 
If result = DialogResult.OK Then
    MsgBox("ok")
End If

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
События DataGrid.
    #32640290
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, спасибо, идея понятна.
...
Рейтинг: 0 / 0
События DataGrid.
    #32640305
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если подчиненная форма открывается так:
Код: plaintext
1.
frmAdr.edit(CompanyForm.selRow)
?
А уже в процедуре Edit происходит Me.ShowDialog()?
...
Рейтинг: 0 / 0
События DataGrid.
    #32640315
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пусть тогда Edit возвращает DialogResult

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
События DataGrid.
    #32640356
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. на в подчиненной форме записать:
Код: plaintext
1.
frmContragent.result=me.ShowDialog()
А в форме основной форме frmContragent ловить Result?
А где его ловить, после строки открытия модальной формы?
...
Рейтинг: 0 / 0
События DataGrid.
    #32640389
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
 ' модальная форма 
Function Edit() As System.Windows.Forms.DialogResult
 'bla-bla-bla 
    Return Me.ShowDialog()
End Function

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 ' главная форма 
Dim modal as ModalForm = new ModalForm()
Dim result As System.Windows.Forms.DialogResult
result = modal.Edit()  ' Открыли модальную форму 
If result = DialogResult.OK Then
    MsgBox("ok")
End If

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / События DataGrid.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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