private void acceptButton_Click(object sender, EventArgs e)
        {
            List <long> checkedOrgList   = new List <long>();
            List <long> uncheckedOrgList = new List <long>();

            // разделить организации на отмеченные и неотмеченные
            foreach (DataRowView rowItem in _orgBS)
            {
                if ((bool)rowItem[Check])
                {
                    checkedOrgList.Add((long)rowItem[Org.id]);
                }
                else
                {
                    uncheckedOrgList.Add((long)rowItem[Org.id]);
                }
            }
            // сменить контейнеры хранения ID организаций
            long[] checkedOrgs   = checkedOrgList.ToArray();
            long[] uncheckedOrgs = uncheckedOrgList.ToArray();
            // получить ID Организаций из БД, за которыми сейчас закреплена Перcона
            long[] orgs = PersonOrg.GetOrgID((long)_personRow[PersonView.id], _connection);
            // объединить множества ID Организаций выбранных из БД и отмеченных пользователем
            orgs = (long[])orgs.Union(checkedOrgs).Distinct().ToArray();
            // получить пересечение множеств ID Организаций, к которым в общем закреплена Персона
            // и ID Организаций, с которых Персона должна быть откреплена
            long[] intersect = (long[])orgs.Intersect(uncheckedOrgs).Distinct().ToArray();
            // если множество пересечения больше множества, к которым в общем прикреплена Персона,
            // то вывести сообщение и прекратить выполнение сохранения в БД
            if (intersect.Length >= orgs.Length)
            {
                MainForm.ShowWarningMessage("Анкетные данные должны быть привязаны хотя бы к одной организации!",
                                            "Внимание");
                return;
            }
            // Вставить записи с отмеченными Организациями и выбранным Пользователем
            PersonOrg.InsertPersonOrg((long)_personRow[PersonView.id], checkedOrgs, _connection);
            // Удалить записи с неотмеченными Организациями и выбранным Пользователем
            PersonOrg.DeletePersonOrg((long)_personRow[PersonView.id], uncheckedOrgs, _connection);
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
        private void AnketaPersonOrgForm_Load(object sender, EventArgs e)
        {
            // инициализация таблицы организаций
            _orgTable = Org.CreateTable();
            // добавление столбца для отметок (пометок)
            _orgTable.Columns.Add(Check, typeof(bool));
            _orgTable.Columns[Check].DefaultValue = false;
            // определение бинда
            _orgBS = new BindingSource();
            // привязка к источнику
            _orgBS.DataSource = _orgTable;
            // запрет на автогенерацию столбцов вьюшки
            this.orgView.AutoGenerateColumns = false;
            // привязка к источнику
            this.orgView.DataSource = _orgBS;
            this.orgView.Sorted    += new EventHandler(orgView_Sorted);
            // если оператор определен и соединение определено
            if (_operator != null && _connection != null)
            {
                // определение адаптера для считывания записей с данными об организациях
                string selectcommand;
                // если оператор - Администратор, то выбрать команду для выбора всех имеющихся организациях
                if (_operator.IsAdmin())
                {
                    selectcommand = Org.GetSelectCommandText();
                }
                else // иначе выбрать толькоте организации, к которым оператор имеет доступ для редактирования
                {
                    selectcommand = Org.GetSelectTextByOperatorAccess(_operator.idVal);
                }
                // инизаализация адаптера
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(selectcommand, _connection);
                // заполнение таблицы данными из БД
                adapter.Fill(_orgTable);
                // получение списка ID организаций, в которых числиться выбранная Персона (физическое лицо)
                long[] orgIDArray = PersonOrg.GetOrgID((long)_personRow[PersonView.id], _connection);
                // отметить из выбранных Организаций те, к которым привязана Персона
                foreach (long id in orgIDArray)
                {
                    int i = _orgBS.Find(Org.id, id);
                    if (i >= 0)
                    {
                        DataRowView tmpRow = _orgBS[i] as DataRowView;
                        tmpRow[Check] = true;
                    }
                }
                // принять изменения (отметки)
                _orgBS.EndEdit();

                // выбрать организации в которых есть документы на человека
                _orgIds = Org.GetOrgsIdWithDocsForPerson((long)_personRow[PersonView.id], _connection);
                // сделать readOnly организации в которых есть документы
                DisableCheckBoxInView();

                // выделить струку с текущей Организацией (усьановить задний фон)
                this.MarkCurOrgRow();
                // отобразить на форме страховой номер и фио выбранной Персоны
                personDataLabel.Text = string.Format("{0}  {1}", _personRow[PersonView.socNumber],
                                                     _personRow[PersonView.fio]);
            }
        }