Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Помогите поставить новую пару логина и пароля в проекте C#

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C# только в данном разделе

Ответ
 
Опции темы
Старый 04.12.2015, 13:48   #1
 Разведчик
Аватар для radmir007
 
radmir007 никому не известный тип
Регистрация: 16.04.2011
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Помогите поставить новую пару логина и пароля в проекте C#

[Ссылки могут видеть только зарегистрированные пользователи. ]

Код:
Form3.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace hcube
{
    public partial class Form3 : Form
    {
        public int User_id;
   
        public Form3()
        {
            InitializeComponent();
            textBox3.Visible = false;                                           // поля для смены пароля невидимы
            textBox4.Visible = false;
            label3.Visible = false;
            Size = new Size(267, 132);                                          // уменьшаем размер формы
            StartPosition = FormStartPosition.CenterScreen;
        }

        private void button2_Click(object sender, EventArgs e)                  // кнопка "Отмена"
        {
            Environment.Exit(0);
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)       // чекбокс смены пароля
        {
            textBox3.Visible = checkBox1.Checked;                               // переключаем видимость полей смены пароля
            textBox4.Visible = checkBox1.Checked;
            label3.Visible = checkBox1.Checked;
            if(checkBox1.Checked)                                               // устанавливаем соответствующий размер
                Size = new Size(267, 187);
            else
                Size = new Size(267, 132);
        }

        private void button1_Click(object sender, EventArgs e)                  // кнопка входа
        {
            if (string.IsNullOrWhiteSpace(textBox1.Text))                       // поле для ввода логина пусто
                textBox1.BackColor = Color.Beige;                               // красим его
            else
            {
                if (string.IsNullOrWhiteSpace(textBox2.Text))                   // поле для ввода пароля пусто
                    textBox2.BackColor = Color.Beige;                           // красим его
                else
                {
                    if (string.IsNullOrWhiteSpace(textBox3.Text) && checkBox1.Checked) // поле нового пароля пусто и выбрана смена
                        textBox3.BackColor = Color.Beige;                              // красим его
                    else
                    {
                        if (checkBox1.Checked && (string.IsNullOrWhiteSpace(textBox4.Text) ||     // выбрана смена пароля
                            textBox3.Text != textBox4.Text))                           // поле повторного ввода нового пароля пусто 
                            textBox4.BackColor = Color.Beige;                          // или не равно первому полю ввода пароля
                        else
                        {
                            OleDbConnection objConnection;                                        // объект соединения с БД
                            objConnection = new OleDbConnection(Program.connectionString);
                            OleDbCommand objCommand = objConnection.CreateCommand();              // создаем объект команды
                            try
                            {
                                // запрашиваем идентификатор пользователя
                                objCommand.CommandText = "SELECT User_id FROM Users WHERE Login=? AND Password=?";
                                objCommand.Parameters.Add(new OleDbParameter("",textBox1.Text));
                                objCommand.Parameters.Add(new OleDbParameter("",textBox2.Text));
                                OleDbDataReader objDataReader;                         // читатель базы
                                objConnection.Open();                                  // открываем соединение с БД
                                objDataReader = objCommand.ExecuteReader();            // создаем читатель и выполняем запрос
                                if (objDataReader.Read())
                                {
                                    User_id = (int)objDataReader["User_id"];
                                    objDataReader.Close();
                                    if (checkBox1.Checked == true)
                                    {
                                        objCommand.CommandText = "UPDATE Users SET [Password]=? WHERE User_id=?";  // изменяем пароль 
                                        objCommand.Parameters.Clear();
                                        objCommand.Parameters.Add(new OleDbParameter("", textBox3.Text));
                                        objCommand.Parameters.Add(new OleDbParameter("", User_id.ToString()));
                                        OleDbTransaction trans = objConnection.BeginTransaction();
                                        objCommand.Transaction = trans;
                                        try
                                        {
                                            objCommand.ExecuteNonQuery();
                                            trans.Commit();
                                        }
                                        catch (Exception ex)
                                        {
                                            trans.Rollback();
                                            MessageBox.Show("Не удалось поменять пароль на новый: " + ex.ToString());
                                            Environment.Exit(1);
                                        }
                                    }
                                    objConnection.Close();                                        // закрываем соединение с БД
                                    Close();
                                }
                                else
                                {
                                    MessageBox.Show("Ошибочная пара логин/пароль, введен логин [" + textBox1.Text + "]");
                                    objConnection.Close();                                        // закрываем соединение с БД
                                }
                            }
                            catch (Exception ex)
                            {                                                       // обработчик возможных ошибок при работе с БД
                                MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                                Environment.Exit(1);
                            }
                        }
                    }
                }
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)               // восстанавливаем цвет полей при смещении каретки
        {
            textBox1.BackColor = Color.White;
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            textBox1.BackColor = Color.White;
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            textBox3.BackColor = Color.White;
        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {
            textBox4.BackColor = Color.White;
        }
    }
}


Form2.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace hcube
{
    public partial class Form2 : Form
    {
        private OleDbConnection objConnection;                              // объект соединения с БД
        private BindingList<User> users = new BindingList<User>();          // список пользователей
        private BindingList<Group> groups = new BindingList<Group>();       // список групп полномочий
        private List<int> perm_ids = new List<int>();                       // список выбранных групп полномочий
        private List<Street> streets = new List<Street>();                  // список улиц
        private List<Agent> agents = new List<Agent>();                     // список платежных агентов
        private List<Category> categories = new List<Category>();           // список видоа влатежей
        private int sel_user;                                               // индекс выбранного пользователя
        private int sel_user_id;                                            // идентификатор выбранного пользователя
        private int sel_group;                                              // индекс выбранной группы
        private int sel_group_id;                                           // идентификатор выбранной группы

        public Form2()
        {
            InitializeComponent();
            StartPosition = FormStartPosition.CenterScreen;
            users.RaiseListChangedEvents = true;
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            objConnection = new OleDbConnection(Program.connectionString);  // создаем объект OleDbConnection для соединения с БД
            OleDbCommand objCommand = objConnection.CreateCommand();        // создаем объект команды
            try
            {
                // задаем SQL-запрос к БД
                objCommand.CommandText = "SELECT User_id,Login,[Position],Name FROM Users"; // запрашиваем информацию о пользователях
                objConnection.Open();                                       // открываем соединение с БД
                OleDbDataReader objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    users.Add(new User((int)objDataReader["User_id"], (string)objDataReader["Login"],
                                       (string)objDataReader["Position"], (string)objDataReader["Name"]));
                }
                objDataReader.Close();                                      // закрываем читатель
                objCommand.CommandText = "SELECT Group_id,Name FROM Groups";// запрашиваем группы доступа
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    groups.Add(new Group((int)objDataReader["Group_id"], (string)objDataReader["Name"]));
                }
                objDataReader.Close();                                      // закрываем читатель
                objCommand.CommandText = "SELECT Street_id,Name FROM Street ORDER BY Name"; // запрашиваем названия улиц
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    streets.Add(new Street((int)objDataReader["Street_id"], (string)objDataReader["Name"]));
                }
                objDataReader.Close();                                      // закрываем читатель
                objCommand.CommandText = "SELECT Payment_id,Name FROM Payment";   // запрашиваем платежных агентов
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    agents.Add(new Agent((int)objDataReader["Payment_id"], (string)objDataReader["Name"]));
                }
                objDataReader.Close();                                      // закрываем читатель
                objCommand.CommandText = "SELECT Category_id,Name FROM Category";   // запрашиваем виды платежей
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    categories.Add(new Category((int)objDataReader["Category_id"], (string)objDataReader["Name"]));
                }
                objDataReader.Close();                                      // закрываем читатель
                objConnection.Close();                                      // закрываем соединение с БД
            }
            catch (Exception ex)
            {                                                               // обработчик возсожных ошибок при работе с БД
                MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                Environment.Exit(1);
            }
            checkedListBox1.DataSource = groups;                            // список возможных групп
            checkedListBox1.DisplayMember = "name";
            checkedListBox1.ValueMember = "id";
            checkedListBox1.SelectedIndex = 0;
            listBox1.DataSource = users;                                    // список пользователей
            listBox1.DisplayMember = "name";
            listBox1.ValueMember = "id";
            listBox1.SelectedIndex = 0;
            checkedListBox2.DataSource = streets;                           // список возможных улиц
            checkedListBox2.DisplayMember = "name";
            checkedListBox2.ValueMember = "id";
            checkedListBox2.SelectedIndex = 0;
            checkedListBox3.DataSource = categories;                        // список возможных видов платежа
            checkedListBox3.DisplayMember = "name";
            checkedListBox3.ValueMember = "id";
            checkedListBox3.SelectedIndex = 0;
            checkedListBox4.DataSource = agents;                            // список возможных платежных агентов
            checkedListBox4.DisplayMember = "name";
            checkedListBox4.ValueMember = "id";
            checkedListBox4.SelectedIndex = 0;
            listBox2.DataSource = groups;                                   // список групп
            listBox2.DisplayMember = "name";
            listBox2.ValueMember = "id";
            listBox2.SelectedIndex = 0;
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)  // изменился выбранный индекс списка пользователей
        {
            if (listBox1.SelectedIndex != -1)                                   // элемент выбран
            {
                sel_user = listBox1.SelectedIndex;                              // фиксируем индекс и идентификатор пользователя
                sel_user_id = users[sel_user].id;
                if (sel_user_id != 1)                                           // для пользователей
                {                                                               // копируем данные в поля ввода
                    textBox1.Text = users[sel_user].position;                   
                    textBox2.Text = users[sel_user].name;
                    textBox3.Text = users[sel_user].login;
                }
                else
                {
                    textBox1.Text = "";                                         // для администратора оставляем поля пустыми
                    textBox2.Text = "";
                    textBox3.Text = "";
                }
                textBox4.Text = "";                                             // поля смены пароля всегда пустые
                textBox5.Text = "";
                button1.Enabled = sel_user_id != 1;                             // администратора нельзя удалить или редактировать
                button2.Enabled = sel_user_id != 1;
                checkedListBox1.Enabled = sel_user_id != 1;
                objConnection = new OleDbConnection(Program.connectionString);  // создаем объект OleDbConnection для соединения с БД
                OleDbCommand objCommand = objConnection.CreateCommand();        // создаем объект команды
                try
                {
                    // запрашиваем разрешенные группы для пользователя
                    objCommand.CommandText = "SELECT Group_id FROM User_Groups WHERE User_id=?";   
                    objConnection.Open();                                       // открываем соединение с БД
                    objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
                    OleDbDataReader objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
                    perm_ids.Clear();
                    while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                    {
                        perm_ids.Add((int)objDataReader["Group_id"]);
                    }
                    objDataReader.Close();                                      // закрываем читатель
                    objConnection.Close();
                    // проставляем отметки на группы, к которым принадлежит пользователь
                    for (int i = 0; i < checkedListBox1.Items.Count; i++)       
                        checkedListBox1.SetItemChecked(i, perm_ids.Contains(((Group)checkedListBox1.Items[i]).id));
                }
                catch (Exception ex)
                {                                                               // обработчик возсожных ошибок при работе с БД
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
        }

        private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) // изменена отметка в списке возможных групп
        {
            objConnection = new OleDbConnection(Program.connectionString);      // создаем объект OleDbConnection для соединения с БД
            OleDbCommand objCommand = objConnection.CreateCommand();            // создаем объект команды
            if (e.NewValue == CheckState.Checked)                               // если отметка проставлена,
            {                                                                   // добавляем связку пользователь-группа в базу данных
                try
                {
                    objConnection.Open();                                       // открываем соединение с БД
                    objCommand.CommandText = "SELECT Count(*) FROM User_Groups WHERE User_id=? AND Group_id=?";
                    objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
                    objCommand.Parameters.Add(new OleDbParameter("", groups[e.Index].id.ToString()));
                    int exist = (int)objCommand.ExecuteScalar();
                    if (exist == 0)
                    {   // команда вставки связки пользователь-группа
                        objCommand.CommandText = "INSERT INTO User_Groups (User_id,Group_id) VALUES(?,?)"; 
                        OleDbTransaction trans = objConnection.BeginTransaction();
                        objCommand.Transaction = trans;
                        try
                        {
                            objCommand.ExecuteNonQuery();
                            trans.Commit();
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            MessageBox.Show("Не удалось добавить новую связку: " + ex.ToString());
                            Environment.Exit(1);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
            else                                                                // если отметка снята,
            {                                                                   // удаляем из базы связку пользователь-группа
                try
                {
                    objConnection.Open();                                       // открываем соединение с БД
                    objCommand.CommandText = "SELECT Count(*) FROM User_Groups WHERE User_id=? AND Group_id=?";
                    objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
                    objCommand.Parameters.Add(new OleDbParameter("", groups[e.Index].id.ToString()));
                    int exist = (int)objCommand.ExecuteScalar();
                    if (exist != 0)
                    {   // команда удаления связки пользователь-группа
                        objCommand.CommandText = "DELETE FROM User_Groups WHERE User_id=? AND Group_id=?"; 
                        OleDbTransaction trans = objConnection.BeginTransaction();
                        objCommand.Transaction = trans;
                        try
                        {
                            objCommand.ExecuteNonQuery();
                            trans.Commit();
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            MessageBox.Show("Не удалось удалить связку: " + ex.ToString());
                            Environment.Exit(1);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
            objConnection.Close();                                              // закрываем соединение с БД
        }

        private void button2_Click(object sender, EventArgs e)                  // кнопка "Удалить"
        {
            objConnection = new OleDbConnection(Program.connectionString);
            OleDbCommand objCommand = objConnection.CreateCommand();            // создаем объект команды
            try
            {
                objConnection.Open();                                           // открываем соединение с БД
                objCommand.CommandText = "DELETE FROM Users WHERE User_id=?";
                objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
                OleDbTransaction trans = objConnection.BeginTransaction();
                objCommand.Transaction = trans;
                try
                {
                    objCommand.ExecuteNonQuery();
                    trans.Commit();
                    users.RemoveAt(sel_user);
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    MessageBox.Show("Не удалось удалить пользователя: " + ex.ToString());
                    Environment.Exit(1);
                }
                objConnection.Close();                                          // закрываем соединение с БД
            }
            catch (Exception ex)
            {                                                                   // обработчик возсожных ошибок при работе с БД
                MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                Environment.Exit(1);
            }
        }

        private void button1_Click(object sender, EventArgs e)                  // кнопка "Сохранить"
        {
            if (string.IsNullOrWhiteSpace(textBox1.Text))                       // должнось не заполнена
                textBox1.BackColor = Color.Beige;                               // красим поле
            else
            {
                if (string.IsNullOrWhiteSpace(textBox2.Text))                   // Ф.И.О.не заполнено
                    textBox2.BackColor = Color.Beige;                           // красим поле
                else
                {
                    objConnection = new OleDbConnection(Program.connectionString);  // создаем объект для соединения с БД
                    OleDbCommand objCommand = objConnection.CreateCommand();        // создаем объект команды
                    int exist = 0;
                    try
                    {                                                        // проверяем, нет ли другого пользователя с новым логином
                        objConnection.Open();                                // открываем соединение с БД
                        objCommand.CommandText = "SELECT Count(*) FROM Users WHERE User_id<>? AND Login=?";
                        objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
                        objCommand.Parameters.Add(new OleDbParameter("", textBox3.Text));
                        exist = (int)objCommand.ExecuteScalar();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                        Environment.Exit(1);
                    }
                    objConnection.Close();                                          // закрываем соединение с БД
                    if (exist != 0 || string.IsNullOrWhiteSpace(textBox3.Text))     // если другой пользователь с таким логином есть
                        textBox3.BackColor = Color.Beige;                           // или логин не введен
                    else                                                            // красим поле
                    {
                        if (string.IsNullOrWhiteSpace(textBox4.Text))               // если пароль не введен
                            textBox4.BackColor = Color.Beige;                       // красим поле
                        else
                        {
                            if (string.IsNullOrWhiteSpace(textBox5.Text) ||         // если пароь не введен повторно или
                                textBox4.Text != textBox5.Text)                     // не соврадает с первым вводом
                                textBox5.BackColor = Color.Beige;                   //  красим поле
                            else
                            {                                                       // сохраняем отредактированные данные
                                objConnection = new OleDbConnection(Program.connectionString);
                                objCommand = objConnection.CreateCommand();         // создаем объект команды
                                try
                                {
                                    objConnection.Open();                           // открываем соединение с БД
                                    objCommand.CommandText = "UPDATE Users SET Login=?,[Password]=?,[Position]=?,Name=? "+
                                                             "WHERE User_id=?";
                                    objCommand.Parameters.Add(new OleDbParameter("", textBox3.Text));
                                    objCommand.Parameters.Add(new OleDbParameter("", textBox4.Text));
                                    objCommand.Parameters.Add(new OleDbParameter("", textBox1.Text));
                                    objCommand.Parameters.Add(new OleDbParameter("", textBox2.Text));
                                    objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
                                    OleDbTransaction trans = objConnection.BeginTransaction();
                                    objCommand.Transaction = trans;
                                    try
                                    {
                                        objCommand.ExecuteNonQuery();
                                        trans.Commit();
                                        users[sel_user].login = textBox3.Text;
                                        users[sel_user].position = textBox1.Text;
                                        users[sel_user].name = textBox2.Text;
                                        textBox1.Text = "";
                                        textBox2.Text = "";
                                        textBox3.Text = "";
                                        textBox4.Text = "";
                                        textBox5.Text = "";
                                    }
                                    catch (Exception ex)
                                    {
                                        trans.Rollback();
                                        MessageBox.Show("Не удалось изменить пользователя: " + ex.ToString());
                                        Environment.Exit(1);
                                    }
                                    objConnection.Close();                          // закрываем соединение с БД
                                }
                                catch (Exception ex)
                                {                                                   // обработчик возсожных ошибок при работе с БД
                                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                                    Environment.Exit(1);
                                }
                            }
                        }
                    }
                }
            }
        }

        private void button5_Click(object sender, EventArgs e)                      // кнопка "Добавить"
        {
            if (string.IsNullOrWhiteSpace(textBox1.Text))                           // должнось не заполнена
                textBox1.BackColor = Color.Beige;                                   // красим поле
            else
            {
                if (string.IsNullOrWhiteSpace(textBox2.Text))                       // Ф.И.О.не заполнено
                    textBox2.BackColor = Color.Beige;                               // красим поле
                else
                {                                                                   // проверяем, нет ли пользователя с таким логином
                    objConnection = new OleDbConnection(Program.connectionString);  // создаем объект для соединения с БД
                    OleDbCommand objCommand = objConnection.CreateCommand();        // создаем объект команды
                    int exist = 0;
                    try
                    {
                        objConnection.Open();                                       // открываем соединение с БД
                        objCommand.CommandText = "SELECT Count(*) FROM Users WHERE Login=?";
                        objCommand.Parameters.Add(new OleDbParameter("", textBox3.Text));
                        exist = (int)objCommand.ExecuteScalar();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                        Environment.Exit(1);
                    }
                    objConnection.Close();                                          // закрываем соединение с БД
                    // пользователь с таким логином есть или логин не введен
                    if (exist != 0 || string.IsNullOrWhiteSpace(textBox3.Text))     
                        textBox3.BackColor = Color.Beige;                           // красим поле
                    else
                    {
                        if (string.IsNullOrWhiteSpace(textBox4.Text))               // если пароль не введен
                            textBox4.BackColor = Color.Beige;                       // красим поле
                        else
                        {
                            if (string.IsNullOrWhiteSpace(textBox5.Text) ||         // если пароль не введен повторно или
                                textBox4.Text != textBox5.Text)                     // повторный ввод не совпадает с первым
                                textBox5.BackColor = Color.Beige;                   // красим поле
                            else
                            {                                                       // добавляем нового пользователя
                                objConnection = new OleDbConnection(Program.connectionString);
                                objCommand = objConnection.CreateCommand();         // создаем объект команды
                                try
                                {
                                    objConnection.Open();                           // открываем соединение с БД
                                    objCommand.CommandText = "INSERT INTO Users (Login,[Password],[Position],Name) VALUES(?,?,?,?)";
                                    objCommand.Parameters.Add(new OleDbParameter("", textBox3.Text));
                                    objCommand.Parameters.Add(new OleDbParameter("", textBox4.Text));
                                    objCommand.Parameters.Add(new OleDbParameter("", textBox1.Text));
                                    objCommand.Parameters.Add(new OleDbParameter("", textBox2.Text));
                                    OleDbTransaction trans = objConnection.BeginTransaction();
                                    objCommand.Transaction = trans;
                                    try
                                    {
                                        objCommand.ExecuteNonQuery();
                                        objCommand.CommandText = "SELECT @@Identity";   // запрашиваем id добавленной записи
                                        int id = (int)objCommand.ExecuteScalar();
                                        // добавляем пользователя в список
                                        users.Add(new User(id, textBox3.Text, textBox1.Text, textBox2.Text)); 
                                        trans.Commit();
                                        textBox1.Text = "";
                                        textBox2.Text = "";
                                        textBox3.Text = "";
                                        textBox4.Text = "";
                                        textBox5.Text = "";
                                    }
                                    catch (Exception ex)
                                    {
                                        trans.Rollback();
                                        MessageBox.Show("Не удалось добавить пользователя: " + ex.ToString());
                                        Environment.Exit(1);
                                    }
                                    objConnection.Close();                          // закрываем соединение с БД
                                }
                                catch (Exception ex)
                                {                                                   // обработчик возсожных ошибок при работе с БД
                                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                                    Environment.Exit(1);
                                }
                            }
                        }
                    }
                }
            }
        }

        // восстанавливаем цвет полей при начале ввода
        private void textBox1_TextChanged(object sender, EventArgs e)   // должнось
        {
            textBox1.BackColor = Color.White;
        }

        private void textBox2_TextChanged(object sender, EventArgs e)   // Ф.И.О.
        {
            textBox2.BackColor = Color.White;
        }

        private void textBox3_TextChanged(object sender, EventArgs e)   // логин
        {
            textBox3.BackColor = Color.White;
        }

        private void textBox4_TextChanged(object sender, EventArgs e)   // пароль
        {
            textBox4.BackColor = Color.White;
        }

        private void textBox5_TextChanged(object sender, EventArgs e)   // повторный ввод пароля
        {
            textBox5.BackColor = Color.White;
        }

        private void listBox2_SelectedIndexChanged(object sender, EventArgs e)      // изменился выбранный индекс списка групп 
        {                                                             //  (аналогично измению выбранного индекса списка пользователей)
            if (listBox2.SelectedIndex != -1)
            {
                sel_group = listBox2.SelectedIndex;
                sel_group_id = groups[sel_group].id;
                textBox6.Text = groups[sel_group].name;
                objConnection = new OleDbConnection(Program.connectionString);  
                OleDbCommand objCommand = objConnection.CreateCommand();   
                try
                {
                    objConnection.Open();
                    // запрашиваем разрешенные улицы                               
                    objCommand.CommandText = "SELECT Street_id FROM Permit_Street WHERE Group_id=?";   
                    objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                    OleDbDataReader objDataReader = objCommand.ExecuteReader();
                    perm_ids.Clear();
                    while (objDataReader.Read() == true)                
                    {
                        perm_ids.Add((int)objDataReader["Street_id"]);
                    }
                    objDataReader.Close();                              
                    for (int i = 0; i < checkedListBox2.Items.Count; i++)           // проставляем отметки в списке возможных улиц
                        checkedListBox2.SetItemChecked(i, perm_ids.Contains(((Street)checkedListBox2.Items[i]).id));
                    // запрашиваем разрешенные виды платежа
                    objCommand.CommandText = "SELECT Category_id FROM Permit_Category WHERE Group_id=?";   
                    objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                    objDataReader = objCommand.ExecuteReader();               
                    perm_ids.Clear();
                    while (objDataReader.Read() == true)                
                    {
                        perm_ids.Add((int)objDataReader["Category_id"]);
                    }
                    objDataReader.Close();
                    for (int i = 0; i < checkedListBox3.Items.Count; i++)      // проставляем отметки в списке возможных видов платежа
                        checkedListBox3.SetItemChecked(i, perm_ids.Contains(((Category)checkedListBox3.Items[i]).id)); 
                    // запрашиваем разрешенных платежных агентов
                    objCommand.CommandText = "SELECT Payment_id FROM Permit_Payment WHERE Group_id=?";   
                    objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                    objDataReader = objCommand.ExecuteReader();          
                    perm_ids.Clear();
                    while (objDataReader.Read() == true)     
                    {
                        perm_ids.Add((int)objDataReader["Payment_id"]);
                    }
                    objDataReader.Close();
                    // проставляем отметки в списке возможных платежных агентов
                    for (int i = 0; i < checkedListBox4.Items.Count; i++)           
                        checkedListBox4.SetItemChecked(i, perm_ids.Contains(((Agent)checkedListBox4.Items[i]).id));
                    objConnection.Close();
                }
                catch (Exception ex)
                {                                              
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
        }

        private void button3_Click(object sender, EventArgs e)                      // Кнопка "Удалить" (группу)
        {
            objConnection = new OleDbConnection(Program.connectionString);
            OleDbCommand objCommand = objConnection.CreateCommand();               
            try
            {
                objConnection.Open();                                               // команда удаления группы
                objCommand.CommandText = "DELETE FROM Groups WHERE Group_id=?";
                objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                OleDbTransaction trans = objConnection.BeginTransaction();
                objCommand.Transaction = trans;
                try
                {
                    objCommand.ExecuteNonQuery();
                    trans.Commit();
                    groups.RemoveAt(sel_group);
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    MessageBox.Show("Не удалось удалить группу: " + ex.ToString());
                    Environment.Exit(1);
                }
                objConnection.Close();                            
            }
            catch (Exception ex)
            {                                                
                MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                Environment.Exit(1);
            }
        }

        private void button4_Click(object sender, EventArgs e)                      // Кнопка "Сохранить" (группу)
        {
            objConnection = new OleDbConnection(Program.connectionString);  
            OleDbCommand objCommand = objConnection.CreateCommand();        
            int exist = 0;
            try
            {
                objConnection.Open();                                               // проверяем нет ли другой группы с таким именем
                objCommand.CommandText = "SELECT Count(*) FROM Groups WHERE Group_id<>? AND Name=?";
                objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                objCommand.Parameters.Add(new OleDbParameter("", textBox6.Text));
                exist = (int)objCommand.ExecuteScalar();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                Environment.Exit(1);
            }
            objConnection.Close();                                                  // есть другая группа со введенным именем
            if (exist != 0 || string.IsNullOrWhiteSpace(textBox6.Text))             // или имя не заполнено
                textBox6.BackColor = Color.Beige;                                   // красим поле
            else
            {                                                                       // сохраняем отредактированное название группы
                objConnection = new OleDbConnection(Program.connectionString);
                objCommand = objConnection.CreateCommand();                         
                try
                {
                    objConnection.Open();                                                           
                    objCommand.CommandText = "UPDATE Groups SET Name=? WHERE Group_id=?";
                    objCommand.Parameters.Add(new OleDbParameter("", textBox6.Text));
                    objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                    OleDbTransaction trans = objConnection.BeginTransaction();
                    objCommand.Transaction = trans;
                    try
                    {
                        objCommand.ExecuteNonQuery();
                        trans.Commit();
                        groups[sel_group].name = textBox6.Text;
                        textBox6.Text = "";
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        MessageBox.Show("Не удалось изменить группу: " + ex.ToString());
                        Environment.Exit(1);
                    }
                    objConnection.Close();                             
                }
                catch (Exception ex)
                {                                                      
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
        }

        private void button6_Click(object sender, EventArgs e)                      // Кнопка "Добавить" (группу)
        {
            objConnection = new OleDbConnection(Program.connectionString);
            OleDbCommand objCommand = objConnection.CreateCommand();
            int exist = 0;
            try
            {
                objConnection.Open();                                               // проверяем нет ли группы с таким именем
                objCommand.CommandText = "SELECT Count(*) FROM Groups WHERE Group_id<>? AND Name=?";
                objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                objCommand.Parameters.Add(new OleDbParameter("", textBox6.Text));
                exist = (int)objCommand.ExecuteScalar();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                Environment.Exit(1);
            }
            objConnection.Close();                                                  // есть группа со введенным именем
            if (exist != 0 || string.IsNullOrWhiteSpace(textBox6.Text))             // или имя не заполнено
                textBox6.BackColor = Color.Beige;                                   // красим поле
            else
            {
                try
                {
                    objCommand.CommandText = "INSERT INTO Groups (Name) VALUES(?)"; // команда добавления группы
                    objConnection.Open();                                      
                    objCommand.Parameters.Add(new OleDbParameter("", textBox6.Text));
                    OleDbTransaction trans = objConnection.BeginTransaction();
                    objCommand.Transaction = trans;
                    try
                    {
                        objCommand.ExecuteNonQuery();
                        objCommand.CommandText = "SELECT @@Identity";               // запрашиваем id добавленной записи
                        int id = (int)objCommand.ExecuteScalar();
                        groups.Add(new Group(id, textBox6.Text));                   // добавляем группу в список
                        trans.Commit();
                        textBox6.Text = "";
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        MessageBox.Show("Не удалось добавить новую группу: " + ex.ToString());
                        Environment.Exit(1);
                    }
                    objConnection.Close();                       
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
        }

        private void textBox6_TextChanged(object sender, EventArgs e)               // восстанавливаем цвет поля ввода
        {
            textBox6.BackColor = Color.White;
        }

        private void checkedListBox2_ItemCheck(object sender, ItemCheckEventArgs e) // изменена отметка в списке улиц
        {
            objConnection = new OleDbConnection(Program.connectionString);
            OleDbCommand objCommand = objConnection.CreateCommand();      
            if (e.NewValue == CheckState.Checked)                                   // отметка проставлена
            {
                try
                {
                    objConnection.Open();                                           // проверяем, была ли такая связка
                    objCommand.CommandText = "SELECT Count(*) FROM Permit_Street WHERE Group_id=? AND Street_id=?";
                    objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                    objCommand.Parameters.Add(new OleDbParameter("", streets[e.Index].id.ToString()));
                    int exist = (int)objCommand.ExecuteScalar();
                    if (exist == 0)                                                 // связки не было
                    {   // команда вставки связки группа-улица
                        objCommand.CommandText = "INSERT INTO Permit_Street (Group_id,Street_id) VALUES(?,?)"; 
                        OleDbTransaction trans = objConnection.BeginTransaction();
                        objCommand.Transaction = trans;
                        try
                        {
                            objCommand.ExecuteNonQuery();
                            trans.Commit();
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            MessageBox.Show("Не удалось добавить новую связку: " + ex.ToString());
                            Environment.Exit(1);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
            else                                                                // отметка снята
            {
                try
                {
                    objConnection.Open();                                       // проверяем, была ли такая связка
                    objCommand.CommandText = "SELECT Count(*) FROM Permit_Street WHERE Group_id=? AND Street_id=?";
                    objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                    objCommand.Parameters.Add(new OleDbParameter("", streets[e.Index].id.ToString()));
                    int exist = (int)objCommand.ExecuteScalar();
                    if (exist != 0)                                             // связка была
                    {   // команда удаления связки группа-улица
                        objCommand.CommandText = "DELETE FROM Permit_Street WHERE Group_id=? AND Street_id=?"; 
                        OleDbTransaction trans = objConnection.BeginTransaction();
                        objCommand.Transaction = trans;
                        try
                        {
                            objCommand.ExecuteNonQuery();
                            trans.Commit();
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            MessageBox.Show("Не удалось удалить связку: " + ex.ToString());
                            Environment.Exit(1);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
            objConnection.Close();                                    
        }

        private void checkedListBox3_ItemCheck(object sender, ItemCheckEventArgs e) // изменена отметка в списке видов платежей
        {
            objConnection = new OleDbConnection(Program.connectionString);
            OleDbCommand objCommand = objConnection.CreateCommand();      
            if (e.NewValue == CheckState.Checked)                               // отметка проставлена
            {
                try
                {
                    objConnection.Open();                                       // проверяем, была ли такая связка
                    objCommand.CommandText = "SELECT Count(*) FROM Permit_Category WHERE Group_id=? AND Category_id=?";
                    objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                    objCommand.Parameters.Add(new OleDbParameter("", categories[e.Index].id.ToString()));
                    int exist = (int)objCommand.ExecuteScalar();
                    if (exist == 0)                                             // связки не было
                    {   // команда вставки связки группа-вид платежа
                        objCommand.CommandText = "INSERT INTO Permit_Category (Group_id,Category_id) VALUES(?,?)"; 
                        OleDbTransaction trans = objConnection.BeginTransaction();
                        objCommand.Transaction = trans;
                        try
                        {
                            objCommand.ExecuteNonQuery();
                            trans.Commit();
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            MessageBox.Show("Не удалось добавить новую связку: " + ex.ToString());
                            Environment.Exit(1);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
            else                                                                // отметка снята
            {
                try
                {
                    objConnection.Open();                                       // проверяем, была ли такая связка
                    objCommand.CommandText = "SELECT Count(*) FROM Permit_Category WHERE Group_id=? AND Category_id=?";
                    objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                    objCommand.Parameters.Add(new OleDbParameter("", categories[e.Index].id.ToString()));
                    int exist = (int)objCommand.ExecuteScalar();
                    if (exist != 0)                                             // связка была
                    {   // команда удаления связки группа-вид платежа
                        objCommand.CommandText = "DELETE FROM Permit_Category WHERE Group_id=? AND Category_id=?"; 
                        OleDbTransaction trans = objConnection.BeginTransaction();
                        objCommand.Transaction = trans;
                        try
                        {
                            objCommand.ExecuteNonQuery();
                            trans.Commit();
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            MessageBox.Show("Не удалось удалить связку: " + ex.ToString());
                            Environment.Exit(1);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
            objConnection.Close();                                      
        }

        private void checkedListBox4_ItemCheck(object sender, ItemCheckEventArgs e) // изменена отметка в списке платежных агентов
        {
            objConnection = new OleDbConnection(Program.connectionString);  
            OleDbCommand objCommand = objConnection.CreateCommand();
            if (e.NewValue == CheckState.Checked)                               // отметка проставлена
            {
                try
                {
                    objConnection.Open();                                       // проверяем, была ли такая связка
                    objCommand.CommandText = "SELECT Count(*) FROM Permit_Payment WHERE Group_id=? AND Payment_id=?";
                    objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                    objCommand.Parameters.Add(new OleDbParameter("", agents[e.Index].id.ToString()));
                    int exist = (int)objCommand.ExecuteScalar();
                    if (exist == 0)                                             // связки не было
                    {   // команда вставки связки группа-платежный агент
                        objCommand.CommandText = "INSERT INTO Permit_Payment (Group_id,Payment_id) VALUES(?,?)"; 
                        OleDbTransaction trans = objConnection.BeginTransaction();
                        objCommand.Transaction = trans;
                        try
                        {
                            objCommand.ExecuteNonQuery();
                            trans.Commit();
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            MessageBox.Show("Не удалось добавить новую связку: " + ex.ToString());
                            Environment.Exit(1);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
            else                                                                // отметка снята
            {
                try
                {
                    objConnection.Open();                                       // проверяем, была ли такая связка
                    objCommand.CommandText = "SELECT Count(*) FROM Permit_Payment WHERE Group_id=? AND Payment_id=?";
                    objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
                    objCommand.Parameters.Add(new OleDbParameter("", agents[e.Index].id.ToString()));
                    int exist = (int)objCommand.ExecuteScalar();
                    if (exist != 0)                                             // связка была
                    {   // команда удаления связки группа-платежный агент
                        objCommand.CommandText = "DELETE FROM Permit_Payment WHERE Group_id=? AND Payment_id=?"; 
                        OleDbTransaction trans = objConnection.BeginTransaction();
                        objCommand.Transaction = trans;
                        try
                        {
                            objCommand.ExecuteNonQuery();
                            trans.Commit();
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            MessageBox.Show("Не удалось удалить связку: " + ex.ToString());
                            Environment.Exit(1);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                    Environment.Exit(1);
                }
            }
            objConnection.Close();                                    
        }
    }
}

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace hcube
{
    public partial class Form1 : Form
    {
        private int User_id;
        private OleDbConnection objConnection;                              // объект соединения с БД
        private List<Street> streets = new List<Street>();                  // список улиц
        private List<House> allhouses = new List<House>();                  // список домов на всех улицах
        private List<House> houses = new List<House>();                     // список домов нв выбранной улице
        private List<Appartment> allappartments = new List<Appartment>();   // список квартир всех домов на всех улицах
        private List<Appartment> appartments = new List<Appartment>();      // список квартир выбранного дома
        private List<Year> years = new List<Year>();                        // список лет, за которые имеется отчетность
        private List<Quorter> quorters = new List<Quorter>();               // список вкарталов
        private List<Quorter> quorterEmp = new List<Quorter>();             // список кварталов, когда год не выбран
        private List<Month> allmonths = new List<Month>();                  // список всех месяцев
        private List<Month> months = new List<Month>();                     // список месяцев выбранного квартала
        private List<Month> monthEmp = new List<Month>();                   // список месяцев, когда квартал не выбран
        private List<Agent> agents = new List<Agent>();                     // список платежных агентов
        private List<Category> categories = new List<Category>();           // список видоа влатежей
        private List<int> axeX = new List<int>();                           // список идентификаторов выбранных граф по горизонтали
        private List<int> axeY = new List<int>();                           // список идентификаторов выбранных граф по вертикали
        private List<DtCell> dtCell = new List<DtCell>();                   // список ячеек выбранной таблицы
        private Object oldradio = null;                                     // погасшая радиокнопка выбора измерений
        private List<int> street_ids=new List<int>();                       // список идентификаторов доступных улиц
        private List<int> category_ids = new List<int>();                   // список идентификаторов доступных видов платежа
        private List<int> agent_ids = new List<int>();                      // список идентификаторов доступных агентов

        public Form1(int id)
        {
            InitializeComponent();
            StartPosition = FormStartPosition.CenterScreen;
            User_id = id;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            objConnection = new OleDbConnection(Program.connectionString);  // создаем объект OleDbConnection для соединения с БД
            OleDbCommand objCommand = objConnection.CreateCommand();        // создаем объект команды
            OleDbDataReader objDataReader;                                  // читатель базы
            try
            {
                objConnection.Open();                                       // открываем соединение с БД
                // запрашиваем должность и Ф.И.О.пользователя
                objCommand.CommandText = "SELECT [Position],Name FROM Users WHERE User_id=?";  
                objCommand.Parameters.Add(new OleDbParameter("", User_id.ToString()));
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                objDataReader.Read();
                textBox2.Text=(string)objDataReader["Position"]+": "+(string)objDataReader["Name"];
                objDataReader.Close();
                // задаем SQL-запрос к БД
                objCommand.CommandText = "SELECT Street.Street_id,Street.Name FROM Street,Permit_Street,Users,User_Groups " +
                    "WHERE Users.User_id=? AND User_Groups.User_id=Users.User_id " +
                    "AND User_Groups.Group_id=Permit_Street.Group_id AND Street.Street_id=Permit_Street.Street_id " +
                    "ORDER BY Street.Name";                                 // запрашиваем названия разрешенных улиц
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    streets.Add(new Street(objDataReader.GetInt32(0), objDataReader.GetString(1)));
                    street_ids.Add(objDataReader.GetInt32(0));
                }
                objDataReader.Close();
                if (street_ids.Count == 0)
                {
                    // задаем SQL-запрос к БД
                    objCommand.CommandText = "SELECT Street_id,Name FROM Street ORDER BY Street.Name";  // запрашиваем названия улиц
                    objDataReader = objCommand.ExecuteReader();             // создаем читатель и выполняем SQL-запрос
                    while (objDataReader.Read() == true)                    // читаем все строки ответа БД
                    {
                        streets.Add(new Street(objDataReader.GetInt32(0), objDataReader.GetString(1)));
                    }
                    objDataReader.Close();
                }
                // задаем SQL-запрос к БД
                objCommand.CommandText = "SELECT House_id,Street_id,Num FROM House ORDER BY Val(Num)";   // запрашиваем номера домов
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    allhouses.Add(new House((int)objDataReader["House_id"], (int)objDataReader["Street_id"],
                                  (string)objDataReader["Num"]));
                }
                objDataReader.Close();                                      // закрываем читатель
                // запрашиваем номера квартир
                objCommand.CommandText = "SELECT Appartment_id,House_id,Num FROM Appartment ORDER BY Val(Num)";   
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    allappartments.Add(new Appartment((int)objDataReader["Appartment_id"],
                                      (int)objDataReader["House_id"], (string)objDataReader["Num"]));
                }
                objDataReader.Close();                                      // закрываем читатель
                // задаем SQL-запрос к БД
                objCommand.CommandText = "SELECT Year_id,Name FROM tYear";  // запрашиваем имеющиеся отчетные годы
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    years.Add(new Year((int)objDataReader["Year_id"], (string)objDataReader["Name"]));
                }
                objDataReader.Close();                                      // закрываем читатель
                // задаем SQL-запрос к БД
                objCommand.CommandText = "SELECT Month_id,Name FROM tMonth";   // запрашиваем список месяцев
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    allmonths.Add(new Month((int)objDataReader["Month_id"], (string)objDataReader["Name"]));
                }
                objDataReader.Close();                                      // закрываем читатель
                objCommand.CommandText = "SELECT Quorter_id,Name FROM tQuorter";   // запрашиваем список кварталов
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    quorters.Add(new Quorter((int)objDataReader["Quorter_id"], (string)objDataReader["Name"]));
                }
                objDataReader.Close();                                      // закрываем читатель
                // задаем SQL-запрос к БД
                objCommand.CommandText = "SELECT Payment.Payment_id,Payment.Name FROM Payment,Permit_Payment,Users,User_Groups "+
                    "WHERE Users.User_id=? AND User_Groups.User_id=Users.User_id " +    // запрашиваем разрешенных платежных агентов
                    "AND User_Groups.Group_id=Permit_Payment.Group_id AND Payment.Payment_id=Permit_Payment.Payment_id";
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    agents.Add(new Agent(objDataReader.GetInt32(0), objDataReader.GetString(1)));
                    agent_ids.Add(objDataReader.GetInt32(0));
                }
                objDataReader.Close();                                      // закрываем читатель
                if (agent_ids.Count == 0)
                {
                    // задаем SQL-запрос к БД
                    objCommand.CommandText = "SELECT Payment_id,Name FROM Payment";
                    objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                    while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                    {
                        agents.Add(new Agent(objDataReader.GetInt32(0), objDataReader.GetString(1)));
                    }
                    objDataReader.Close();                                      // закрываем читатель
                }
                // задаем SQL-запрос к БД
                objCommand.CommandText = "SELECT Category.Category_id,Category.Name FROM Category,Permit_Category,Users,User_Groups "+
                    "WHERE Users.User_id=? AND User_Groups.User_id=Users.User_id " +   // запрашиваем разрешенные виды платежей
                    "AND User_Groups.Group_id=Permit_Category.Group_id AND Category.Category_id=Permit_Category.Category_id";
                objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                {
                    categories.Add(new Category(objDataReader.GetInt32(0), objDataReader.GetString(1)));
                    category_ids.Add(objDataReader.GetInt32(0));
                }
                objDataReader.Close();                                      // закрываем читатель
                if (category_ids.Count == 0)
                {
                    // задаем SQL-запрос к БД
                    objCommand.CommandText = "SELECT Category_id,Name FROM Category";
                    objDataReader = objCommand.ExecuteReader();                 // создаем читатель и выполняем SQL-запрос
                    while (objDataReader.Read() == true)                        // читаем все строки ответа БД
                    {
                        categories.Add(new Category(objDataReader.GetInt32(0), objDataReader.GetString(1)));
                    }
                    objDataReader.Close();                                      // закрываем читатель
                }
                objConnection.Close();                                      // закрываем соединение с БД
            }
            catch (Exception ex)                                    
            {                                                               // обработчик возможных ошибок при работе с БД
                MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                Environment.Exit(1);
            }
            comboBox2.DropDownStyle = ComboBoxStyle.DropDownList;
            years.Insert(0, new Year(0, "Не задан"));                       // инициализируем список отчетных лет
            comboBox2.DataSource = years;
            comboBox2.DisplayMember = "name";
            comboBox2.ValueMember = "id";
            comboBox2.SelectedIndex = 0;
            comboBox3.DropDownStyle = ComboBoxStyle.DropDownList;
            quorters.Insert(0, new Quorter(0, "Не задан"));                 // инициализируем список кварталов
            quorterEmp.Add(new Quorter(0, "Не задан"));                     // и пустой список кварталов
            comboBox3.DataSource = quorterEmp;
            comboBox3.DisplayMember = "name";
            comboBox3.ValueMember = "id";
            comboBox3.SelectedIndex = 0;
            comboBox4.DropDownStyle = ComboBoxStyle.DropDownList;
            months.Add(new Month(0, "Не задан"));                           // инициализируем список месяцев
            monthEmp.Add(new Month(0, "Не задан"));                         // и пустой список месяцев
            comboBox4.DataSource = monthEmp;
            comboBox4.DisplayMember = "name";
            comboBox4.ValueMember = "id";
            comboBox4.SelectedIndex = 0;
            comboBox6.DropDownStyle = ComboBoxStyle.DropDownList;
            streets.Insert(0, new Street(0, "Не задана"));                  // инициализируем список улиц
            comboBox6.DataSource = streets;
            comboBox6.DisplayMember = "name";
            comboBox6.ValueMember = "id";
            comboBox6.SelectedIndex = 0;
            comboBox7.DropDownStyle = ComboBoxStyle.DropDownList;
            houses.Add(new House(0, 0, "Не задан"));                        // инициализируем список домов
            comboBox7.DataSource = houses;
            comboBox7.DisplayMember = "num";
            comboBox7.ValueMember = "id";
            comboBox7.SelectedIndex = 0;
            comboBox8.DropDownStyle = ComboBoxStyle.DropDownList;
            appartments.Add(new Appartment(0, 0, "Не задан"));              // инициализируем список квартир
            comboBox8.DataSource = appartments;
            comboBox8.DisplayMember = "num";
            comboBox8.ValueMember = "id";
            comboBox8.SelectedIndex = 0;
            comboBox10.DropDownStyle = ComboBoxStyle.DropDownList;
            agents.Insert(0, new Agent(0, "Не задан"));                     // инициализируем список платежных агентов
            comboBox10.DataSource = agents;
            comboBox10.DisplayMember = "name";
            comboBox10.ValueMember = "id";
            comboBox10.SelectedIndex = 0;
            comboBox12.DropDownStyle = ComboBoxStyle.DropDownList;
            categories.Insert(0, new Category(0, "Не задан"));              // инициализируем список видов платежей
            comboBox12.DataSource = categories;
            comboBox12.DisplayMember = "name";
            comboBox12.ValueMember = "id";
            comboBox12.SelectedIndex = 0;
            radioButton1.Checked = true;                                    // первоначально выбраны по горизонтали период,
            radioButton7.Checked = true;                                    // а по вертикаль адрес
            dataGridView1.AllowUserToAddRows = false;                       // задаем хпрактеристики таблицы для
            dataGridView1.AllowUserToDeleteRows = false;                    // отображения результатов
            dataGridView1.AllowUserToResizeRows = true;
            dataGridView1.EnableHeadersVisualStyles = false;
            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
            dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
            dataGridView1.ShowEditingIcon = false;
        }

        private void comboBox6_SelectedIndexChanged(object sender, EventArgs e)
        {   // событие изменения выбора улицы
            if (comboBox7.Items.Count != 0)                         // список домов уже инициализирован
            {
                comboBox7.DataSource = null;                        // отключаем список домов от источника данных
                houses.Clear();                                     // очищаем список домов выбранной улицы
                houses.Add(new House(0,0, "Не задан"));             // заполняем список домами выбранной улицы
                if (comboBox6.SelectedIndex != 0)                   // в том случае, если не выбрано "Не задан"
                {
                    foreach (House hs in allhouses)
                        if (hs.street_id == (int)(comboBox6.SelectedValue))
                            houses.Add(hs);
                }
                comboBox7.DataSource = houses;                      // подключаем список к источнику данных
                comboBox7.DisplayMember = "num";
                comboBox7.ValueMember = "id";
                comboBox7.SelectedIndex = 0;
            }
        }

        private void comboBox7_SelectedIndexChanged(object sender, EventArgs e)
        {   // событие изменения выбора дома
            if (comboBox7.DataSource != null && comboBox8.Items.Count != 0)
            {   // список инициализирован и событие не вызвано отключением от источника данных списка домов
               comboBox8.DataSource = null;                         // отключаем список квартир от источника данных
               appartments.Clear();                                 // очищаем список квартир выбранного дома
               appartments.Add(new Appartment(0, 0, "Не задан"));   // заполняем список квартирами выбранного дома
               if (comboBox7.SelectedIndex != 0)                    // в том случае, если не выбрано "Не задан"
                {
                    foreach (Appartment ap in allappartments)
                        if (ap.house_id == (int)(comboBox7.SelectedValue))
                            appartments.Add(ap);
                }
                comboBox8.DataSource = appartments;                 // подключаем список к источнику данных
                comboBox8.DisplayMember = "num";
                comboBox8.ValueMember = "id";
                comboBox8.SelectedIndex = 0;
            }
        }

        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {   // событие изменения выбора года
            if (comboBox3.Items.Count != 0)                         // список кварталов уже инициализирован
            {
                comboBox3.DataSource = null;                        // отключаем список кварталов от источника данных
                if (comboBox2.SelectedIndex != 0)                   // если год выбран
                    comboBox3.DataSource = quorters;                // подключаем заполненный список
                else
                    comboBox3.DataSource = quorterEmp;              // если не выбран - пустой
                comboBox3.DisplayMember = "name";
                comboBox3.ValueMember = "id";
                comboBox3.SelectedIndex = 0;
            }
        }
        private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
        {   // событие изменения выбора квартала
            if (comboBox3.DataSource != null && comboBox4.Items.Count != 0)
            {   // список месяцев инициализирован и событие не вызвано отключением от источника данных списка кварталов
                comboBox4.DataSource=null;                          // отключаем список месяцев от источника данных
                months.Clear();                                     // очищаем список месяцев квартала
                months.Add(new Month(0, "Не задан"));               // формируем список месяцев квартала заново
                if (comboBox3.SelectedIndex != 0)                   // если квартал выбран
                {
                    for (int i = 0; i < 3; i++)
                        months.Add(allmonths[((int)comboBox3.SelectedValue-1)*3+i]);
                }
                comboBox4.DataSource = months;                      // подключаем список к источнику данных
                comboBox4.DisplayMember = "name";
                comboBox4.ValueMember = "id";
                comboBox4.SelectedIndex = 0;
            }
        }

        private void CheckedChanged(object sender, EventArgs e)
        {   // обработчик событий от радиокнопок выбора координат по горизонтали и по вертикали
            if (!((RadioButton)sender).Checked)                     // запоминаем кнопку, 
                oldradio = sender;                                  // с которой была снята отметка
            if (radioButton1.Checked && radioButton8.Checked ||     // запрещаем выбор одинаковых
                radioButton2.Checked && radioButton7.Checked ||     // координат по горизонтали
                radioButton3.Checked && radioButton6.Checked ||     // и по вертикали
                radioButton4.Checked && radioButton5.Checked)
                if(oldradio != null)                                // если есть запомненная кнопка,
                    ((RadioButton)oldradio).Checked = true;         // восстанавливаем предыдущий выбор
            if (radioButton1.Checked || radioButton8.Checked)       // выбран период
            {
                comboBox2.SelectedIndex = 0;                        // паркуем выбор периода
                comboBox2.Enabled = false;                          // запрещаем списки выбора периода
                comboBox3.Enabled = false;
                comboBox4.Enabled = false;
                radioButton9.Checked = true;                        // показываем радиокнопки выбора
                radioButton9.Visible = true;                        // степени детализации по периоду
                radioButton10.Visible = true;
                radioButton11.Visible = true;
            }
            else
            {                                                       // иначе
                comboBox2.Enabled = true;                           // разрешаем списки выбора периода
                comboBox3.Enabled = true;
                comboBox4.Enabled = true;
                radioButton9.Visible = false;                       // скрываем выбор степени детализации
                radioButton10.Visible = false;
                radioButton11.Visible = false;
            }
            if (radioButton2.Checked || radioButton7.Checked)       // выбран адрес
            {
                comboBox6.SelectedIndex = 0;                        // паркуем выбор адреса
                comboBox6.Enabled = false;                          // запрещаем списки выбора адреса
                comboBox7.Enabled = false;
                comboBox8.Enabled = false;
                radioButton12.Checked = true;                       // показываем радиокнопки выбора
                radioButton12.Visible = true;                       // степни детализации по адресу
                radioButton13.Visible = true;
                radioButton14.Visible = radioButton7.Checked;       // по горизонтали детализацию до квартиры
            }                                                       // не производим
            else
            {
                comboBox6.Enabled = true;                           // разщрешаем списки выбора адреса
                comboBox7.Enabled = true;
                comboBox8.Enabled = true;
                radioButton12.Visible = false;                      // скрываем выбор степени детализации
                radioButton13.Visible = false;
                radioButton14.Visible = false;
            }
            if (radioButton3.Checked || radioButton6.Checked)       // выбран платежный агент
            {
                comboBox10.SelectedIndex = 0;                       // паркуем выбор платежного агента
                comboBox10.Enabled = false;                         // запрещаем список  выбора иплатежного агента
            }
            else
                comboBox10.Enabled = true;                          // разрешаем список выбора платежного агента
            if (radioButton4.Checked || radioButton5.Checked)       // выбран вид платежа
            {
                comboBox12.SelectedIndex = 0;                       // паркуем выбор вида платежа
                comboBox12.Enabled = false;                         // запрещаем список выбора вида платежа 
            }
            else
                comboBox12.Enabled = true;                          // разрешгаем список выбора вида платежа
        }

        private void button1_Click(object sender, EventArgs e)
        {   // обработка нажатия кнопки "Запрос"
            objConnection = new OleDbConnection(Program.connectionString);  // создаем объект OleDbConnection для соединения с БД
            OleDbCommand objCommand = objConnection.CreateCommand();// создаем объект команды
            try
            {
                // задаем SQL-запрос к БД
                textBox1.Text=MakeRequest();                        // формируем запрос данных
                objCommand.CommandText = textBox1.Text;             // выводим его в строку состояния
                OleDbDataReader objDataReader;                      // читатель базы
                objConnection.Open();                               // открываем соединение с БД
                objDataReader = objCommand.ExecuteReader();         // создаем читатель и выполняем SQL-запрос
                axeX.Clear();                                       // очищаем список идентификаторов выбранных граф по горизонтали
                axeY.Clear();                                       // очищаем список идентификаторов выбранных граф по вертикали
                dtCell.Clear();                                     // очищаем список ячеек выбранной таблицы
                while (objDataReader.Read() == true)                // читаем все строки ответа БД
                {
                    int parX = Convert.ToInt32(objDataReader[1]);
                    int parY = Convert.ToInt32(objDataReader[2]);
                    if (!axeX.Contains(parX))                       // формируем список идентификаторов выбранных граф по горизонтали
                        axeX.Add(parX);
                    if (!axeY.Contains(parY))                       // формируем список идентификаторов выбранных граф по вертикали
                        axeY.Add(parY);
                    dtCell.Add(new DtCell(parX,parY,(double)objDataReader[0])); // формируем список ячеек выбранной таблицы
                }
                objDataReader.Close();
                objConnection.Close();                              // закрываем соединение с БД
            }
            catch (Exception ex)                                    
            {                                                       // обработчик возсожных ошибок при работе с БД
                MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                Environment.Exit(1);
            }
            int cols = axeX.Count;                                  // фиксируем количество строк и столбцов выборки
            int rows = axeY.Count;
            while (cols < dataGridView1.ColumnCount)                // подгоняем количество ячеек таблицы под данные выборки
            {                                                       // ...убираем лишние столбцы
                dataGridView1.Columns.RemoveAt(dataGridView1.ColumnCount - 1);
            }
            while (cols > dataGridView1.ColumnCount)
            {                                                       // ...добавляем недостающие столбцы
                DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
                column.Width = 100;
                column.SortMode = DataGridViewColumnSortMode.NotSortable;
                DataGridViewCell cell = new DataGridViewTextBoxCell();
                cell.Style.BackColor = Color.LightCyan;
                cell.Style.SelectionBackColor = Color.Cyan;
                cell.Style.SelectionForeColor = Color.Blue;
                cell.Style.Format = "0.##";
                column.CellTemplate = cell;
                dataGridView1.Columns.Add(column);
            }
            while (rows < dataGridView1.RowCount)
            {                                                       // ...убираем лишние строки
                dataGridView1.Rows.RemoveAt(dataGridView1.RowCount - 1);
            }
            while (rows > dataGridView1.RowCount)
            {                                                       // ...добавляем недостающие строки
                DataGridViewRow row = new DataGridViewRow();
                dataGridView1.Rows.Add(row);
            }
            for (int i = 0; i < cols; i++)                          // формируем заголовки столбцов
            {
                string header="";
                if (radioButton1.Checked)                           // это период
                {
                    int quorter, month, year;                       // делим идентификатор на месяц, год и квартал
                    month = axeX[i] % 100;
                    quorter = (axeX[i] / 100) % 100;
                    year = axeX[i] / 10000;
                    for (int j = 0; j < years.Count; j++)           // ищем в списке год
                    {
                        if (year == years[j].id)
                        {
                            for(int k=1; k < quorters.Count; k++)   // ищем в списке квартал
                            {
                                if (quorter == quorters[k].id)
                                {
                                    for (int l = 0; l < allmonths.Count; l++)   // ищем в списке месяц
                                    {
                                        if (month == allmonths[l].id)
                                        {
                                            header += allmonths[l].name +" ";
                                            break;
                                        }
                                    }
                                    if(month == 0)                  // квартал выводим, если не задан месяц
                                        header += quorters[k].name+ " ";
                                    break;
                                }
                            }
                            header += years[j].name;
                            break;
                        }
                    }
                }
                else if (radioButton2.Checked)                      // это адрес
                {
                    if(radioButton12.Checked)                       // детализация до улицы
                    {
                        for (int j = 0; j < streets.Count; j++)     // ищем улицу
                        {
                            if (axeX[i] == streets[j].id)
                            {
                                header = streets[j].name;
                                break;
                            }
                        }
                    }
                    else if (radioButton13.Checked)                 // детализация до дома
                    {
                        for (int j = 0; j < allhouses.Count; j++)   // ищем дом
                        {
                            if (axeX[i] == allhouses[j].id)
                            {
                                for (int k = 0; k < streets.Count; k++) // ищем улицу
                                {
                                    if (allhouses[j].street_id == streets[k].id)
                                    {
                                        header += streets[k].name;
                                        break;
                                    }
                                }
                                header += ", д."+allhouses[j].num;
                                break;
                            }
                        }
                    }
                    else
                    {                                               // детализация до квартиры
                        for (int l = 0; l < allappartments.Count; l++)  // ищем квартиру
                        {
                            if (axeX[i] == allappartments[l].id)
                            {
                                for (int j = 0; j < allhouses.Count; j++)   // ищем дом
                                {
                                    if (allappartments[l].house_id == allhouses[j].id)
                                    {
                                        for (int k = 0; k < streets.Count; k++)     // ищем улицу
                                        {
                                            if (allhouses[j].street_id == streets[k].id)
                                            {
                                                header += streets[k].name;
                                                break;
                                            }
                                        }
                                        header += ", д." + allhouses[j].num;
                                        break;
                                    }
                                }
                                header += ", кв." + allappartments[l].num;
                            }
                        }
                    }
                }
                else if (radioButton3.Checked)                      // это платежный агент
                {
                    for (int j = 0; j < agents.Count; j++)          // ищем платежного агента
                        if (axeX[i] == agents[j].id)
                        {
                            header = agents[j].name;
                            break;
                        }
                }
                else
                {                                                   // это вид платеджа
                    for (int j = 0; j < categories.Count; j++)      // ищем вид платежа
                        if (axeX[i] == categories[j].id)
                        {
                            header = categories[j].name;
                            break;
                        }
                }
                dataGridView1.Columns[i].HeaderText = header;       // вписываем сформированный заголовок
            }
            for (int i = 0; i < rows; i++)                          // формируем заголовки строк
            {
                string header = "";
                if (radioButton8.Checked)                           // это период
                {
                    int quorter, month, year;
                    month = axeY[i] % 100;                          // делим идентификатор на месяц, год и квартал
                    quorter = (axeY[i] / 100) % 100;
                    year = axeY[i] / 10000;
                    for (int j = 0; j < years.Count; j++)           // ищем год
                    {
                        if (year == years[j].id)
                        {
                            for (int k = 1; k < quorters.Count; k++)    // ищем квартал
                            {
                                if (quorter == quorters[k].id)
                                {
                                    for (int l = 0; l < allmonths.Count; l++)   // ищем месяц
                                    {
                                        if (month == allmonths[l].id)
                                        {
                                            header += allmonths[l].name + " ";
                                            break;
                                        }
                                    }
                                    if (month == 0)                 // квартал выводим, если не задан месяц
                                        header += quorters[k].name + " ";
                                    break;
                                }
                            }
                            header += years[j].name;
                            break;
                        }
                    }
                }
                else if (radioButton7.Checked)                      // это адрес
                {
                    if (radioButton12.Checked)                      // детализация до улицы
                    {
                        for (int j = 0; j < streets.Count; j++)     // ищем улицу
                        {
                            if (axeY[i] == streets[j].id)
                            {
                                header = streets[j].name;
                                break;
                            }
                        }
                    }
                    else if (radioButton13.Checked)                 // детализация до дома
                    {
                        for (int j = 0; j < allhouses.Count; j++)   // ищем дом
                        {
                            if (axeY[i] == allhouses[j].id)
                            {
                                for (int k = 0; k < streets.Count; k++) // ищем улицу
                                {
                                    if (allhouses[j].street_id == streets[k].id)
                                    {
                                        header += streets[k].name;
                                        break;
                                    }
                                }
                                header += ", д." + allhouses[j].num;
                                break;
                            }
                        }
                    }
                    else
                    {                                               // детализация до квартиры
                        for (int l = 0; l < allappartments.Count; l++)  // ищем квартиру
                        {
                            if (axeY[i] == allappartments[l].id)
                            {
                                for (int j = 0; j < allhouses.Count; j++)   // ищем дом
                                {
                                    if (allappartments[l].house_id == allhouses[j].id)
                                    {
                                        for (int k = 0; k < streets.Count; k++) // ищем улицу
                                        {
                                            if (allhouses[j].street_id == streets[k].id)
                                            {
                                                header += streets[k].name;
                                                break;
                                            }
                                        }
                                        header += ", д." + allhouses[j].num;
                                        break;
                                    }
                                }
                                header += ", кв." + allappartments[l].num;
                            }
                        }
                    }
                }
                else if (radioButton6.Checked)                      // это платежный агент
                {
                    for (int j = 0; j < agents.Count; j++)          // ищем агента
                        if (axeY[i] == agents[j].id)
                        {
                            header = agents[j].name;
                            break;
                        }
                }
                else
                {                                                   // это вид платежа
                    for (int j = 0; j < categories.Count; j++)      // ищем вид платежа
                        if (axeY[i] == categories[j].id)
                        {
                            header = categories[j].name;
                            break;
                        }
                }
                dataGridView1.Rows[i].HeaderCell.Value = header;    // вписываем сформированный заголовок
            }
            for(int k = 0; k < dtCell.Count; k++)                   // заполныем тело таблицы
            {
                int i,j;
                for(j=0; j < cols; j++)                             // по сформированным спискам идентификаторов
                    if(dtCell[k].x == axeX[j])
                        break;
                for(i=0; i < rows; i++)
                    if(dtCell[k].y == axeY[i])
                        break;
                dataGridView1.Rows[i].Cells[j].Value=dtCell[k].data;
            }
        }

        string MakeRequest()
        {   // функция формирует запрос по текущему состоянию интерфейса
            string req = "SELECT sum(sum),";                        // начало запроса
            string reqx,reqy,grx,gry;
            string wh="WHERE true ";
            if (street_ids.Count != 0)                              // если есть ограничения по улицам
            {
                wh += "AND street_id IN (";                         // добавляем список разрешенных улиц
                for (int i = 0; i < street_ids.Count - 1; i++)
                    wh += street_ids[i].ToString() + ",";
                wh += street_ids[street_ids.Count - 1].ToString() + ") ";
            }
            if (category_ids.Count != 0)                            // если есть огранничения по видам платежей
            {
                wh += "AND category_id IN (";                       // добавляем список разрешенных видов платежей
                for (int i = 0; i < category_ids.Count - 1; i++)
                    wh += category_ids[i].ToString() + ",";
                wh += category_ids[category_ids.Count - 1].ToString() + ") ";
            }
            if (agent_ids.Count != 0)                               // если есть ограничения по платежнвм агентам
            {
                wh += "AND payment_id IN (";                        // доббавляем список разрешенных платежных агентов
                for (int i = 0; i < agent_ids.Count - 1; i++)
                    wh += agent_ids[i].ToString() + ",";
                wh += agent_ids[agent_ids.Count - 1].ToString() + ") ";
            }
            if (radioButton1.Checked)                               // по горизонтали выбран период
            {
                if (radioButton9.Checked)                           // детализация до года
                {
                    reqx = "avg(year_id*10000),";
                    grx = "year_id*10000,";
                }
                else if (radioButton10.Checked)                     // детализация до квартала
                {
                    reqx = "avg(year_id*10000+quorter_id*100),";
                    grx = "year_id*10000+quorter_id*100,";
                }
                else
                {                                                   // детализация до месяца
                    reqx = "avg(year_id*10000+quorter_id*100+month_id),";
                    grx = "year_id*10000+quorter_id*100+month_id,";
                }
            }
            else if (radioButton2.Checked)                          // по горизонтали выбран адрес
            {
                if (radioButton12.Checked)                          // детализация до улицы
                {
                    reqx = "street_id,";
                    grx = reqx;
                }
                else if (radioButton13.Checked)                     // детализация до дома
                {
                    reqx = "house_id,";
                    grx = reqx;
                }
                else
                {                                                   // детализация до квартиры
                    reqx = "appartment_id,";
                    grx = reqx;
                }
            }
            else if (radioButton3.Checked)                          // по горизонтали выбран платежный агент
            {
                reqx = "payment_id,";
                grx=reqx;
            }
            else
            {                                                       // по горизонтали выбран вид платежа
                reqx="category_id,";
                grx = reqx;
            }
            if (radioButton8.Checked)                               // по вертикали выбран период
            {
                if (radioButton9.Checked)                           // детализация до года
                {
                    reqy = "avg(year_id*10000) ";
                    gry = "year_id*10000 ";
                }
                else if (radioButton10.Checked)                     // детализация до квартала
                {
                    reqy = "avg(year_id*10000+quorter_id*100) ";
                    gry = "year_id*10000+quorter_id*100 ";
                }
                else
                {                                                   // детализация до месяца
                    reqy = "avg(year_id*10000+quorter_id*100+month_id) ";
                    gry = "year_id*10000+quorter_id*100+month_id ";
                }
            }
            else if (radioButton7.Checked)                          // по вертикали выбран адрес
            {
                if (radioButton12.Checked)                          // детализация до улицы
                {
                    reqy = "street_id ";
                    gry = reqy;
                }
                else if (radioButton13.Checked)                     // детализация до дома
                {
                    reqy = "house_id ";
                    gry = reqy;
                }
                else
                {                                                   // детализация до квартиры
                    reqy = "appartment_id ";
                    gry = reqy;
                }
            }
            else if (radioButton6.Checked)                          // по вертикали выбран платежный агент
            {
                reqy="payment_id ";
                gry = reqy;
            }
            else
            {                                                       // по вертикали выбран вид платежа
                reqy="category_id ";
                gry = reqy;
            }
            // формирование условий
            if (!radioButton1.Checked && !radioButton8.Checked)     // по периоду
            {
                if (comboBox2.SelectedIndex != 0)                   // год
                    wh += string.Format("and year_id={0} ", comboBox2.SelectedValue);
                if (comboBox3.SelectedIndex != 0)                   // квартал
                    wh += string.Format("and quorter_id={0} ", comboBox3.SelectedValue);
                if (comboBox4.SelectedIndex != 0)                   // месяц
                    wh += string.Format("and month_id={0} ", comboBox4.SelectedValue);
            }
            if (!radioButton2.Checked && !radioButton7.Checked)     // по адресу
            {
                if (comboBox8.SelectedIndex != 0)                   // улица
                    wh += string.Format("and appartment_id={0} ", comboBox8.SelectedValue);
                else if (comboBox7.SelectedIndex != 0)              // дом
                    wh += string.Format("and house_id={0} ", comboBox7.SelectedValue);
                else if (comboBox6.SelectedIndex != 0)              // квартира
                    wh += string.Format("and street_id={0} ", comboBox6.SelectedValue);
            }
            if (!radioButton3.Checked && !radioButton6.Checked)     // по платежному агенту
            {
                if (comboBox10.SelectedIndex != 0)                   // агент
                    wh += string.Format("and payment_id={0} ", comboBox10.SelectedValue);
            }
            if (!radioButton4.Checked && !radioButton5.Checked)     // по виду платежа
            {
                if (comboBox12.SelectedIndex != 0)                   // вид платежа
                    wh += string.Format("and category_id={0} ", comboBox12.SelectedValue);
            }
            // возвращаем сформированный запрос
            return req+reqx+reqy+"FROM pay "+wh+"GROUP BY "+grx+gry;
        }
    }
}


Agent.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hcube
{
    class Agent
    {                                       // запись платежного агента
        private int _id;                    // код агента
        private string _name;               // название агента
        public Agent(int id, String name)
        {
            _id = id;
            _name = name;
        }
        public string name
        {
            get
            {
                return _name;
            }
        }

        public int id
        {
            get
            {
                return _id;
            }
        }
    }
}


Appartment.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hcube
{
    class Appartment
    {                                                   // запись квартиры
        int _id;                                        // код квартиры
        int _house_id;                                  // код дома
        string _num;                                    // номер квартиры
        public Appartment(int id,int house_id,String num)
        {
            _id = id;
            _house_id = house_id;
            _num = num;
        }
        public string num
        {
            get
            {
                return _num;
            }
        }

        public int id
        {
            get
            {
                return _id;
            }
        }
        public int house_id
        {
            get
            {
                return _house_id;
            }
        }
    }
}

Category.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hcube
{
    class Category
    {                                           // запись вида платежа
        private int _id;                        // код вида платежа
        private string _name;                   // наименование вида платежа
        public Category(int id, String name)
        {
            _id = id;
            _name = name;
        }
        public string name
        {
            get
            {
                return _name;
            }
        }

        public int id
        {
            get
            {
                return _id;
            }
        }
    }
}

DtCell.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hcube
{
    class DtCell
    {                                           // запись ячейки выбранной таблицы
        private int _x, _y;                     // идентификаторы координат
        private double _data;                   // данные
        public DtCell(int x, int y, double data)
        {
            _x = x;
            _y = y;
            _data = data;
        }
        public int x
        {
            get
            {
                return _x;
            }
        }
        public int y
        {
            get
            {
                return _y;
            }
        }

        public double data
        {
            get
            {
                return _data;
            }
        }
    }
}
Group.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace hcube
{
    class Group : INotifyPropertyChanged
    {
        private int _id;                            // код группы
        private string _name;                       // название группы
        public event PropertyChangedEventHandler PropertyChanged;

        public Group(int id, string name)
        {
            _id = id;
            _name = name;
        }

        public int id
        {
            get
            {
                return _id;
            }
            set
            {
                _id = value;
            }
        }

        public string name
        {
            get
            {
                return _name;
            }
            set
            {
                _name = value;
                OnPropertyChanged("name");
            }
        }

        protected void OnPropertyChanged(string info)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(info));
        }
    }
}
House.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hcube
{
    class House
    {                                               // запись дома
        int _id;                                    // код дома
        int _street_id;                             // код улицы
        string _num;                                // номер дома
        public House(int id,int street_id,String num)
        {
            _id = id;
            _street_id = street_id;
            _num = num;
        }
        public string num
        {
            get
            {
                return _num;
            }
        }

        public int id
        {
            get
            {
                return _id;
            }
        }
        public int street_id
        {
            get
            {
                return _street_id;
            }
        }
    }
}
Month.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hcube
{
    class Month
    {                                   // запись месяца
        private int _id;                // код месяца
        private string _name;           // название месяца
        public Month(int id, String name)
        {
            _id = id;
            _name = name;
        }
        public string name
        {
            get
            {
                return _name;
            }
        }

        public int id
        {
            get
            {
                return _id;
            }
        }
    }
}
Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Data.OleDb;

namespace hcube
{
    static class Program
    {
        // строка подключения к базе данных (предполагается, что БД расположена в стартовой папке)
        static public string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;" +
                                      "data source=" + Application.StartupPath + "\\commun.mdb";
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            OleDbConnection conn;
            conn = new OleDbConnection(connectionString);           // создаем объект OleDbConnection для соединения с БД
            try
            {
                conn.Open();                                        // открываем соединение с БД
                conn.Close();                                       // закрываем соединение с БД
            }
            catch (Exception ex)
            {                                                       // обработчик возсожных ошибок при работе с БД
                MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
                Environment.Exit(1);
            }
            Form3 login=new Form3();                                // запрашиваем аутентификацию
            Application.Run(login);
            if (login.User_id == 0)                                 // аутентификация не пройдена
                Environment.Exit(0);
            else if(login.User_id == 1)                             // аутентификация пройдена и это администратор
                Application.Run(new Form2());                       // запускаем форму администрирования
            else
                Application.Run(new Form1(login.User_id));          // иначе запускаем рабочую форму
        }
    }
}

Quorter.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hcube
{
    class Quorter
    {                                           // запись квартала
        private int _id;                        // код квартала
        private string _name;                   // название квартала
        public Quorter(int id, String name)
        {
            _id = id;
            _name = name;
        }
        public string name
        {
            get
            {
                return _name;
            }
        }

        public int id
        {
            get
            {
                return _id;
            }
        }
    }
}

Street.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hcube
{
    class Street
    {                                               // запись улицы
        private int _id;                            // код улицы
        private string _name;                       // название улицы
        public Street(int id, String name)
        {
            _id = id;
            _name = name;
        }
        public string name
        {
            get
            {
                return _name;
            }
        }

        public int id
        {
            get
            {
                return _id;
            }
        }
    }
}
User.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace hcube
{
    class User : INotifyPropertyChanged     // запись пользователя
    {
        private int     _id;                // код пользователя
        private string  _login;             // логин
        private string  _position;          // должность
        private string  _name;              // Ф.И.О.
        public event PropertyChangedEventHandler PropertyChanged;

        public User(int id, string login, string position, string name)
        {
            _id = id;
            _login = login;
            _position = position;
            _name = name;
        }
        public int id
        {
            get
            {
                return _id;
            }
            set
            {
                _id = value;
            }
        }
        public string login
        {
            get
            {
                return _login;
            }
            set
            {
                _login = value;
            }
        }
        public string position
        {
            get
            {
                return _position;
            }
            set
            {
                _position = value;
            }
        }
        public string name
        {
            get
            {
                return _name;
            }
            set
            {
                _name = value;
                OnPropertyChanged("name");
          }
      }

      protected void OnPropertyChanged(string info)
      {
          PropertyChangedEventHandler handler = PropertyChanged;
          if (handler != null)
              handler(this, new PropertyChangedEventArgs(info));
      }
   }
}


Year.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hcube
{
    class Year
    {                                               // запись года
        private int _id;                            // код года
        private string _name;                       // название года
        public Year(int id, String name)
        {
            _id = id;
            _name = name;
        }
        public string name
        {
            get
            {
                return _name;
            }
        }

        public int id
        {
            get
            {
                return _id;
            }
        }
    }
}
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Информация] даём свой акк блокады без пароля и логина Дима Макаров Баги игр ВКонтакте 0 12.09.2014 23:25
[Помогите!] окно логина и пароля diablo241191 Общение и обсуждение Perfect World 0 09.01.2014 22:20
помогите найти оффсет полей ввода логина и пароля vladoscom93 Общение разработчиков 3 10.08.2012 21:50

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 16:09.

Пишите нам: [email protected]
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net