BindingNavigatorAddNewItem

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

BindingNavigatorAddNewItem

Сообщение kroskros » 10.05.2006 (Ср) 8:25

Речь идет о VS2005
Собственно, я уже пытался тут выяснить этот вопрос,
но как-то малоэффективно.

Попробую конкретизировать вопросы.
Итак:
Создал форму, на ней разместил DataGrid,
связанный с таблицей БД (SQl 2000).
Автоматом на форме нарисовался DataBindingNavigator,
на нем, ессно, кнопки.
Среди прочих эта самая BindingNavigatorAddNewItem.
По нажатию на неё, ясное дело, в датагриде создается новая строка.
Все отлично...

Сложность заключается в том, что не все поля таблицы разрешено
вводить пользователю вручную (вообще-то у этого поля
пользователь и не видит).
Так, в поле [CODE] должно вставляться значение,
выбранное в КомбоБоксе в этой же форме.

вопросЫ:
1) КАК мне реализовать вставку новой строки, так чтобы поле КОД заполнялось
выбранным значением комбобокса?
поясню: я не могу сообразить на какое событие "повесить" занесение значения
в поле КОД новой строки? :(
Могу внести код в BindingNavigatorAddNewItem_Click, но при этом не знаю,
как обратиться к новой созданной строке, да еще и не уверен,
что на момент нажатия на кнопку эта строка уже есть...
Упражняться в Дизайнере над событиями Датасета и Датаадаптера
не очень хочется, потому как, они используются и в других формах,
и не факт, что на момент внесения данных через другую форму
будет использован Комбобокс.

2) Подскажите, где ВООБЩЕ можно посмотреть код, сгенерированный VS2005
для события Click данной кнопки?
Max

mse
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 24.07.2005 (Вс) 0:53

Сообщение mse » 10.05.2006 (Ср) 18:40

Если 2005VS то там вообще это целый компонент (BindingNavigator) то есть тулбар и на той кнопке(BindingNavigatorAddNewItem) сделай процедуры при который после нажатия буде добовлятся нужный тебе текс в новую строку. :roll:

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 11.05.2006 (Чт) 5:41

Замечательно, интересная идея!!! :wink:
так-то я уже писал о коде и том, что не могу сообразить,
как его организовать...


Хорошо, теперь пойдем дальше: а КАК должна эта процедура выглядеть???
собственно, я к тому клоню, что
если бы я нашел сгенерированный VS2005 код,
то по образу и подобию смог бы, наверное, написать свой...
Max

baha76
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 07.01.2004 (Ср) 10:59
Откуда: Ташкент

Сообщение baha76 » 11.05.2006 (Чт) 6:47

Найти код, сгенерированный студией не трудно:
В окне Solution Explorer отметь свой проект и нажми пиктограмму Show All Files в верхней части, или через меню Project -> Show All Files.
Тогда откроешь плюсик своей формы и увидиш форм.Designer.vb.

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 11.05.2006 (Чт) 10:19

О! спасибо! :)
как фсе сложно в этом мире.. ;)
Max

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 11.05.2006 (Чт) 11:02

Не... все оказалось ЕЩЕ сложнее..
в этом файле только данные о свойствах нарисованных элементах на форме...

а код того, КАК обрабатывать нажатие на кнопку
где-то в другом месте?

охъ.. подскажите кто-нить, вразумите неразумного...
КАК внести автоматически сгенерированное значение в ячейку
создаваемой НОВОЙ строки датагрида?? :(((
Max

mse
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 24.07.2005 (Вс) 0:53

Сообщение mse » 11.05.2006 (Чт) 11:03

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

baha76
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 07.01.2004 (Ср) 10:59
Откуда: Ташкент

Сообщение baha76 » 11.05.2006 (Чт) 12:05

Я у себя экспериментировал и BindingNavigator автоматом никак не рисуется. Нужно вручную вставлять.
А можно посмотреть на твой код? Мне интересно, как ты сделал это.

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 11.05.2006 (Чт) 12:32

mse писал(а):Если честно, то я не понимаю смысла тебе это делать. Разницы то нет, какой, что ты сделаешь процедуру и что найдешь сгенерированный код. А в коде то нет процедуры по добавлению там только настройки компонента.

ГЫ... )))))))))))))
ДА Я НА ВСЕ СОГЛАСНЫЙ!!!!
тока скажите КАК это реализовать???
по нажатюю кнопки AddItem в датагрид вставляется новая строка,
так вот надо, чтобы в эту строку в поле КОД вставлялось заданное
в комбобоксе значение.
вот и все...
может можно как-то указать ЗНАЧЕНИЕ_по_умолчанию для
ячейки создаваемой строки???

baha76 писал(а):Я у себя экспериментировал и BindingNavigator автоматом никак не рисуется. Нужно вручную вставлять.
А можно посмотреть на твой код? Мне интересно, как ты сделал это.

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

сделал ЧТО, я не понял.
вот именно что НЕ сделал, чег хотел...
а код кидать смысла нет, ибо работать без БД он не станет, это раз,
да и разлапистый он слишком... :(
Max

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 11.05.2006 (Чт) 21:03

Этот компонент при нажатии кнопки Add делает следующее:
Код: Выделить всё
If (GAL_SelectWorksByComplCodeBindingNavigator.Validate AndAlso _
(Not GAL_SelectWorksByComplCodeBindingNavigator.BindingSource Is Nothing)) Then
   GAL_SelectWorksByComplCodeBindingNavigator.BindingSource.AddNew()
   GAL_SelectWorksByComplCodeBindingNavigator.Refresh()
End If

После этого выкидывается событие Click

Reflector for .NET - скачай обязательно
http://www.aisto.com/roeder/dotnet/
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 11.05.2006 (Чт) 21:58

а вставлять значения наверное как-то так:
Код: Выделить всё
With GAL_SelectWorksByComplCodeDataGridView
  .Rows.Item(.RowCount - 1).Cells("DataGridViewTextBoxColumn1").Value = "22323"
  'Or
  '.Rows.Item(.RowCount - 1).Cells(0).Value = "22323"
End With
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 11.05.2006 (Чт) 22:39

или так
Код: Выделить всё
Private Sub GAL_SelectWorksByComplCodeDataGridView_RowsAdded( _
  ByVal sender As Object, _
  ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs _
  ) Handles GAL_SelectWorksByComplCodeDataGridView.RowsAdded

      With CType(sender, DataGridView)
          .Rows.Item(e.RowIndex).Cells(0).Value = "22323"
      End With

End Sub
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 12.05.2006 (Пт) 7:27

Nord777 писал(а):Этот компонент при нажатии кнопки Add делает следующее:
Код: Выделить всё
....   GAL_SelectWorksByComplCodeBindingNavigator.BindingSource.AddNew()



.. НУ конечно же BindingSource.AddNew!
"Это просто позор какой-то..." (с)
только так я и не понял, где он, код этот лежит впроекте.. :(
видимо пора краситься в блондинку...

БОЛЬШОЕ СПАСИБО!

плюнул на все и создал свою кнопку, с обработкой события
кому интересно:

Код: Выделить всё
  Private Sub tlbtnAddNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tlbtnAddNew.Click
        If (Me.Gal_ObjectsBindingNavigator.Validate AndAlso (Not Me.Gal_ObjectsBindingNavigator.BindingSource Is Nothing)) Then
            Me.Gal_ObjectsBindingNavigator.BindingSource.AddNew()
            Me.Gal_ObjectsBindingNavigator.Refresh()
' создаю строку чтобы не тащить за собой по коду монстроватую
' конструкцию обращения к новой строке
            Dim row As DataRowView
            row = Me.Gal_ObjectsBindingNavigator.BindingSource.Item(Gal_ObjectsBindingNavigator.BindingSource.Count - 1)
            row.Item("ObjectGroupCode") = Me.cmbObjGroupNames.SelectedValue
        End If
    End Sub
Max

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 12.05.2006 (Пт) 22:21

В коде он нигде у тебя не лежит. Это я посмотрел с помощью Reflector'а.
Загружаешь в Рефлектор .dll или .exe а он выдает тебе все классы, методы и код который содержится в сборке. Типа дизасемблера, только траслирует в vb.net (и не только).
Вобщем лучше один раз увидеть.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 15.05.2006 (Пн) 5:49

ааа.... вон оно как...
Спасибо, у меня уже есть Рефлектор, тока я не додумался,
что придется дизасемблировать.. :(
теперь буду так поступать в пиковые моменты жизни.. ;)

хм... неужели и вправду в VS2005 нельзя никак извлечь этот самы код?
Max

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 15.05.2006 (Пн) 11:57

Напрямую никак. Потому что BindingNavigator находится в System.Windows.Forms.dll. Но в .Net есть все необходимое для просмотра сборок. (System.Reflection)
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 89

    TopList