{
MyDBDataSet.SotrudnikiRow r = (MyDBDataSet.SotrudnikiRow)((DataRowView)sotrudnikiBindingSource.Current).Row;
dogovorBindingSource.Filter = "idsotr = " + r.id.ToString();
}
Если необходимо, чтоб при нажатии на какую-либо кнопку отображались договора всех сотрудников, не зависимо от выбранного, то в ее обработчике прописываем:
dogovorBindingSource.Filter =string.Empty;
Теперь о формировании отчетов. Пусть нам необходимо сформировать список контрагентов, чье наименование содержит введенное пользователем значение. Для начала идем в редактор dataset и у таблички KontrTableAdapter выбираем правой кнопкой Add query. Выбираем Use select statements, далее select with returns rows, далее дополняем имеющийся там запрос строчкой:
WHERE (Name like ’%@Name%’)
В поле MethodName раздела FillDataTable пишем FillByName, во втором разделе – GetDataByName.
С датами и числовыми значениями все согласно синтаксису SQL.
Соответственно, если нужно будет делать несколько разных отчетов, то будет несколько разных методов.
Теперь на форму с отчетом помещаем datagridview, настроенный на таблицу контрагентов, размещаем текстовое поле, в которое пользователь будет вводить данные. По кнопке пишем код:
kontrTableAdapter.FillByName(myDBDataSet.Kontr,textBox1.Text);
Далее вам необходимо спроектировать все формы, которые понадобятся для работы и разместить на них все визуальные компоненты работы с таблицами. После того, как вы это сделаете, можно переходить дальше.
Теперь рассмотрим, как спроектировать данную программу с учетом разделения на управляющие классы и интерфейсы. Нам необходимо увести всю работу с БД в управляющий класс, а в форме будут только вызовы методов этого класса и передача ему соответствующих параметров.
Первое, что нам необходимо сделать, это определить перечисление для того, чтобы в основной программе определять тип обрабатываемого справочника. Пусть в нашей программе определено два справочника(контрагенты и сотрудники). Модифицируем наш управляющий класс, добавив в него это перечисление. Объявим его так:
|
public enum Kontr{kontr,sotrudnik};
Теперь объявим у класса поле типа SqlConnecion, которое будет определять текущее подключение:
public SqlConnection conn;
Теперь объявим метод установки подключения. Он нам понадобится, если в процессе работы программы будем менять подключение. В качестве параметров передадим ему путь к БД и формы, на которых размещены объекты подключения к БД. Пусть в наем примере эти объекты объявлены на Form1 и Form2. В методе будем создавать новое подключение и перенастраивать на него все компоненты работы с БД:
Public void SetConnecton(string dbf,Form1 th, Form2 th2)
{
ConsStr = dbf;
conn = new SqlConnection(ConsStr);
th.kontrTableAdapter.Connection = conn;
th.sotrudnikiTableAdapter.Connection = conn;
th2.sotrudnikiTableAdapter.Connection = conn;
th2.kontrTableAdapter.Connection = conn;
th.kontrTableAdapter.Fill(th.myDBDataSet1.Kontr1);
th.sotrudnikiTableAdapter.Fill(th.myDBDataSet.Sotrudniki1);
th2.kontrTableAdapter.Fill(th.myDBDataSet.Kontr);
th2.sotrudnikiTableAdapter.Fill(th.myDBDataSet.Sotrudniki);
}
Теперь напишем метод, который будет сохранять измененные данные(например, после того как пользователь сохраняет данные после редактирования или добавления нового элемента). В метод будем передавать перечисление, определяющее тип справочника и форму, на которой расположены объекты подключения к БД. Этот метод будем вызывать при возврате к списку данных.
Public void SaveData(Kontr h,Form1 th)
{
if (h == Kontr.kontr)
{
th.kontrBindingSource.EndEdit();
th.kontrTableAdapter.Update(th.myDBDataSet.Kontr);
th.kontrTableAdapter.Fill(th.myDBDataSet.Kontr);
}
}
По этому же принципу напишем метод удаления текущего элемента выбранного справочника:
|
Public void removecur(Kontr h,Form1 th)
{
if (h == Kontr.sotrudnik)
{
th.sotrudnikiBindingSource.RemoveCurrent();
th.sotrudnikiBindingSource.EndEdit();
th.sotrudnikiTableAdapter.Update(th.myDBDataSet.Sotrudniki);
}
}
Теперь напишем метод, который будет отвечать за создание или редактирование элементов справочника. В качестве параметров передадим ему логическую переменную, определяющую добавление или редактирование выполняется, тип справочника, ссылку на основную форму и на форму с полями редактирования элемента справочника: