Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с bindingsourse, Добавление записи, изменение записи 
:(
    Опции темы
GUZstav
Дата 25.4.2009, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.4.2009

Репутация: нет
Всего: нет



Доброго времни суток, уважаемые программисты.

Проектирую арм на c#, база microsoft sql server 2005. Раньше писал на delphi + access, прошу не судить строго, потому как пишу первое серьезное приложение на c#.
У меня следующая проблема: есть две формы, на form1 расположен datagridview, который привязан к bindingsourse соответсвующей таблицы, на ней все правильно отображается, на этой форме есть кнопки "добавить", "изменить", удалить запись. НА второй форме лежат textboxы, comboboxы, привязанные к своему bindingsourse.
При нажатии добавить хотелось сделать, что = нить типо этого:

 public void button2_Click(object sender, EventArgs e)
        {
            updatePacient updatePacient1 = new updatePacient(); // это вторая форма

            updatePacient1.Validate;
            updatePacient1.t_kartaBindingSource.AddNew;

            updatePacient1.ShowDialog(this);
          }

И вторая форма открылась бы на новой записи. Вместо этого она открывается на 1й записи. Догадываюсь, что это из=за того, что на каждой форме свой binding sourse и dataset. Бьюсь уже 3 день ничего на ум не приходит.

Что касается кнопки изменить. Хотелось бы сделать так, чтобы с form1 я смог бы прередать bindingsorse1.position на 2 форму bindingsorse2.position:

bindingsorse2.position=bindingsorse1.position и при открытии 2 формы она бы открывалась на той позици которую я выбрал в datagrid 1-й формы.

Я делал аналогичную программу на delphi, там я поступал так: брал номер текущей позиции datagrid на 1 форме, и фильтровал по нему вторую, все работало. Здесь же хотелось бы сделать все грамотно.

Зачем мне это надо: хочу уйти от bindingnavigatora и оставить на нем одну лишь кнопку сохранить. Прогу делаю для людей поэтому борюсь за простоту использования. 

Времени мало, кто знает тыкните пальцем где туплю. Книги читать времени тоже нет. Заранее благодарю..
PM MAIL   Вверх
-Mikle-
Дата 25.4.2009, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 1
Всего: 59



Если я правильно понял, то вторая форма забивает/отображает/изменяет одну строку какой-то таблицы? Если так, то я бы не делал привязку на второй форме. Вместо этого, я бы передавал DataRow (или DataRowView) второй форме. После нажатия ОК на 2-ой форме записывал бы значения в переданную DataRow. Примерно так:
Код

private void AddPacient()
{
    DataTable table = ..... // pacient table
    DataRow row = table.NewRow();
    UpdatePacientForm setPacientDlg = new UpdatePacientForm();
    setPacientDlg.Record = row;
    if(setPacientDlg.ShowDialog(this) == DialogResult.OK)
        table.Rows.Add(row);
}

private void EditPacient()
{
    DataRow row = ... // current row
    UpdatePacientForm setPacientDlg = new UpdatePacientForm();
    setPacientDlg.Record = row;
    setPacientDlg.ShowDialog(this);
}


ИМХО, привязка на 2-ой форме имела бы смысл, если бы она отображала дополнительные сведения, то есть она была бы не модальной и постоянно висела бы, и когда на первой форме выбирали бы запись, то на второй автоматом бы отображалась текущая строка... В твоем случае 2-ая форма это диалог...


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
GUZstav
Дата 25.4.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.4.2009

Репутация: нет
Всего: нет



Да ты меня правильно понял. Ты предлогаешь создать переменную row типа 


Цитата(-Mikle- @  25.4.2009,  12:52 Найти цитируемый пост)
setPacientDlg.Record = row;


но откуда у формы поле типа record

можно здесь подробнее...

а затем присваивать row. имя поля = "......... " и так для каждого, не проще тогда воспользовать insert.

А в метоле formactivate писать
{
         textbox1.text=row. имя поля// для просмотра
}

Добавлено через 10 минут и 46 секунд
Цитата(-Mikle- @  25.4.2009,  12:52 Найти цитируемый пост)
привязка на 2-ой форме имела бы смысл, если бы она отображала дополнительные сведения

к основной таблице привязаны справочники, которые отбражают значения в combobox
PM MAIL   Вверх
GUZstav
Дата 25.4.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.4.2009

Репутация: нет
Всего: нет



ну есть же функция bindingsourse.addnew. как ее вызвать с form1 для updatePacient? и как передать bindingsourse.position для грида на form1 в bindingsourse.position формы updatePacient, чтобы bindingsourse сам выставил данные нужного человека? зачем изобретать велосипед если уже есть встроенные функции?
PM MAIL   Вверх
-Mikle-
Дата 25.4.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 1
Всего: 59



Ну ок. Тогда сделай BindingSource 2-ой формы Public (в дизайнере(!) есть такое свойство Modifiers)
После этого, BindingSource будет доступен извне:

updatePacient.t_kartaBindingSource...........

Что делать дальше, думаю уже понятно. ((или нет?))


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
GUZstav
Дата 26.4.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.4.2009

Репутация: нет
Всего: нет



спасибо, догнал, теперь проблема такая
Код

        public void button2_Click(object sender, EventArgs e)
        {
            updatePacient updatePacientDlg = new updatePacient();
            updatePacientDlg.t_kartaTableAdapter.Fill(updatePacientDlg.dataSet1.T_karta);
            
            updatePacientDlg.t_kartaBindingSource.AddNew();
            updatePacientDlg.t_kartaBindingSource.MoveLast();
            
        
            updatePacientDlg.ShowDialog(this);


новая запись о человеке добавляется, но на него не переходит, т.е movelast не работает. Подскажите, может надо както обновить
PM MAIL   Вверх
GUZstav
Дата 26.4.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.4.2009

Репутация: нет
Всего: нет



всем спасибо дошло. movelast не работал, т.к были куски кода в форм активэйт, мой тупняк smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.2254 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.