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

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

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

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

Вообщем на основной форме есть 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
06.08.2004, 13:20
    #32638547
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
dencat
Возможно нужно использовать DataBinding, но при попытке использовать следующий код:
txtGenDir.DataBindings.Add("text", CompanyForm.dsCompany.Tables("ContragentSotrudnTbl"), "FIO")
При первом открытии формы вроде нормально, а при повторном открытии пишет что в коллекции уже есть такой databindings и выдается исключение.

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

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
06.08.2004, 13:36
    #32638589
dencat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Спасибо сейчас попробую.
...
Рейтинг: 0 / 0
06.08.2004, 15:02
    #32638834
dencat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Вопрос, а какое событие происходит при вставке новой строки в таблицу?
Все таки сделал пока с событиями:
Код: 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
06.08.2004, 18:19
    #32639236
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Код: 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
07.08.2004, 22:02
    #32639673
dencat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Спасибо, чего-то у меня в пятницу был "не день Бэкхэма"...
...
Рейтинг: 0 / 0
07.08.2004, 22:17
    #32639679
dencat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Не получается, при добавлении записи сообщение не выскакивает...
Хотя направление копания вроде понятно...
...
Рейтинг: 0 / 0
07.08.2004, 22:40
    #32639688
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
это сообщение всплывет, когда реально закончится редактирование новой записи (например, будет выбрана в гриде др. запись)

отловить начало редактирования новой записи возможно, но несколько иными средствами.
...
Рейтинг: 0 / 0
08.08.2004, 17:41
    #32639947
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Я не сторонник использования 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
08.08.2004, 19:52
    #32640023
dencat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Спасибо, сейчас попробуем.
...
Рейтинг: 0 / 0
08.08.2004, 19:58
    #32640029
dencat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Да, в DataGrid записи не редактируются, записи редактируются в специальной форме, которая открывается при двойном клике на строке в DataGrid, или при нажатии кнопки Edit.
...
Рейтинг: 0 / 0
08.08.2004, 20:20
    #32640046
dencat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
А можно ли сделать так, что-бы при нажатии кнопки OK на модальной форме(подчиненной) после ее закрытия, выполнялась-бы процедура на главной форме?
...
Рейтинг: 0 / 0
09.08.2004, 09:27
    #32640268
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
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
09.08.2004, 09:43
    #32640290
dencat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Ага, спасибо, идея понятна.
...
Рейтинг: 0 / 0
09.08.2004, 09:50
    #32640305
dencat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
А если подчиненная форма открывается так:
Код: plaintext
1.
frmAdr.edit(CompanyForm.selRow)
?
А уже в процедуре Edit происходит Me.ShowDialog()?
...
Рейтинг: 0 / 0
09.08.2004, 09:59
    #32640315
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Пусть тогда Edit возвращает DialogResult

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
09.08.2004, 10:18
    #32640356
dencat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Т.е. на в подчиненной форме записать:
Код: plaintext
1.
frmContragent.result=me.ShowDialog()
А в форме основной форме frmContragent ловить Result?
А где его ловить, после строки открытия модальной формы?
...
Рейтинг: 0 / 0
09.08.2004, 10:32
    #32640389
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События DataGrid.
Код: 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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / События DataGrid. / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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