private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            //показать полную инфу про препода
            DataRow row = null;

            if (prepod_list.SelectedIndex >= 0)
            {
                row = prepod_set.Rows[prepod_list.SelectedIndex];
            }
            else
            {
                return;
            }

            prepod_edit pe = new prepod_edit();

            pe.prep_id = prepod_id;

            pe.dolz_id           = (int)row[2];
            pe.zvan_id           = (int)row[4];
            pe.uch_id            = (int)row[3];
            pe.kaf_id            = (int)row[5];
            pe.pictureBox1.Image = main.GetPhotoFromBD("prepod", prepod_id);
            pe.deny_photo        = true;

            pe.status_box.Checked = (bool)row[9];
            if (pe.status_box.Checked)
            {
                pe.status_box.Text = "Статус: работает";
            }
            else
            {
                pe.status_box.Text = "Статус: уволен";
            }

            bool sex = (bool)row[7];

            if (sex == false)
            {
                pe.female.Checked = true;
            }

            pe.fam.Text   = row[10].ToString();
            pe.im.Text    = row[11].ToString();
            pe.ot.Text    = row[12].ToString();
            pe.phone.Text = row[6].ToString();
            pe.email.Text = row[8].ToString();

            pe.button8.Left    = pe.button7.Left;
            pe.button8.Text    = "Закрыть";
            pe.button7.Visible = false;
            pe.button4.Visible = false;
            pe.button3.Visible = false;
            pe.button2.Visible = false;
            pe.button1.Visible = false;

            DialogResult pres = pe.ShowDialog();
        }
        private void linkLabel5_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            //добавить нового препода
            prepod_edit pe = new prepod_edit();

            pe.pictureBox1.Image  = main.GetPhotoFromBD("prepod", 69);
            pe.status_box.Checked = true;
            pe.first     = false;
            pe.zavkaf_id = (int)kaf_set.Rows[kaf_list.SelectedIndex][3];

            FilePhoto = DefaultPath;

            pe.pictureBox1.Image.Save(FilePhoto, System.Drawing.Imaging.ImageFormat.Jpeg);
            pe.FilePhoto = FilePhoto;

            DialogResult peres = pe.ShowDialog();

            if (peres == DialogResult.Cancel)
            {
                return;
            }

            string famn    = pe.fam.Text.Trim();
            string imn     = pe.im.Text.Trim();
            string otn     = pe.ot.Text.Trim();
            int    kafidn  = pe.kaf_id;
            int    dolzn   = pe.dolz_id;
            int    stepidn = pe.uch_id;
            int    zvann   = pe.zvan_id;
            bool   actualn = pe.status_box.Checked;
            string addrn   = pe.email.Text.Trim();;
            string phonen  = pe.phone.Text.Trim();
            bool   sexn    = pe.male.Checked;

            bool newzav = (pe.dolz_list.Text.ToLower().Trim().Contains("заведующий"));

            //фото сохраняется отдельно

            SqlCommand cmd = new SqlCommand();

            cmd.Connection  = main.global_connection;
            cmd.CommandText = "select prepod.actual, kafedra.name from prepod " +
                              " join kafedra on prepod.kafedra_id = kafedra.id " +
                              " where fam like @FAM and " +
                              " im like @IM and " +
                              " ot like @OT and " +
                              " sex = @SEX ";
            cmd.Parameters.Add("@FAM", SqlDbType.NVarChar).Value = famn;
            cmd.Parameters.Add("@IM", SqlDbType.NVarChar).Value  = imn;
            cmd.Parameters.Add("@OT", SqlDbType.NVarChar).Value  = otn;
            cmd.Parameters.Add("@SEX", SqlDbType.Bit).Value      = sexn;

            SqlDataAdapter sda = new SqlDataAdapter(cmd);

            DataTable oldprepods = new DataTable();

            sda.Fill(oldprepods);

            string message = "";

            if (oldprepods.Rows.Count > 0)
            {
                if (oldprepods.Rows.Count == 1)
                {
                    message = "Обнаружен преподаватель с такой же фамилией, именем и отчеством:\n\n";
                }
                else
                {
                    message = "Обнаружены преподаватели с аналогичными фамилией, именем и отчеством:\n\n";
                }

                int i = 1;
                foreach (DataRow dr in oldprepods.Rows)
                {
                    string stat = ((bool)dr[0]) ? "работает" : "уволен(а)";

                    message += i.ToString() + ". " +
                               famn + " " + imn + " " + otn + " [кафедра " +
                               dr[1].ToString() + ", статус - " + stat + "];\n";
                }

                message += "\n\nВыполнить сохранение введенной Вами информации?";

                DialogResult dres = MessageBox.Show(message,
                                                    "Выбор действия",
                                                    MessageBoxButtons.YesNo,
                                                    MessageBoxIcon.Question);

                if (dres == DialogResult.No)
                {
                    return;
                }
            }

            //добавить новую запись в БД
            cmd            = new SqlCommand();
            cmd.Connection = main.global_connection;

            cmd.CommandText = "insert into prepod " +
                              "( fam, im, ot, kafedra_id, dolznost_id, " +
                              "  stepen_id, zvanie_id, actual, address, phone, sex )" +
                              "  values " +
                              "( @FAM, @IM, @OT, @KAFEDRA_ID, @DOLZNOST_ID, " +
                              "  @STEPEN_ID, @ZVANIE_ID, @ACTUAL, @ADDRESS, @PHONE, @SEX )";

            cmd.Parameters.Add("@FAM", SqlDbType.NVarChar).Value = famn;
            cmd.Parameters.Add("@IM", SqlDbType.NVarChar).Value  = imn;
            cmd.Parameters.Add("@OT", SqlDbType.NVarChar).Value  = otn;

            cmd.Parameters.Add("@KAFEDRA_ID", SqlDbType.Int).Value   = kafidn;
            cmd.Parameters.Add("@DOLZNOST_ID", SqlDbType.Int).Value  = dolzn;
            cmd.Parameters.Add("@STEPEN_ID", SqlDbType.Int).Value    = stepidn;
            cmd.Parameters.Add("@ZVANIE_ID", SqlDbType.Int).Value    = zvann;
            cmd.Parameters.Add("@ACTUAL", SqlDbType.Bit).Value       = actualn;
            cmd.Parameters.Add("@ADDRESS", SqlDbType.NVarChar).Value = addrn;
            cmd.Parameters.Add("@PHONE", SqlDbType.NVarChar).Value   = phonen;
            cmd.Parameters.Add("@SEX", SqlDbType.Bit).Value          = sexn;

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception exx)
            {
                MessageBox.Show("Неожиданный сбой при передаче данных. Повтоите операцию ввода еще раз.",
                                "Ошибка передачи данных",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            cmd = new SqlCommand("select @@Identity", main.global_connection);
            int prepidn = Convert.ToInt32(cmd.ExecuteScalar().ToString());

            if (pe.deny_photo == false)
            {
                FilePhoto = pe.FilePhoto;
            }
            save_prepod_photo_by_id(prepidn);

            //сохранить данные нового зав каф
            if (newzav)
            {
                //дать запрос и поставить в поле завкаф нулевого препода
                cmd = new SqlCommand("update kafedra set zav_kaf_id=@ZAV where " +
                                     "id = " + kaf_set.Rows[kaf_list.SelectedIndex][0].ToString(),
                                     main.global_connection);
                cmd.Parameters.Add("@ZAV", SqlDbType.Int).Value = prepidn;
                cmd.ExecuteNonQuery();

                int Sel = kaf_list.SelectedIndex;

                //загрузить кафедры, получить активную
                string selcom = "select id, name_krat, name, zav_kaf_id from kafedra " +
                                "where actual=1 " +
                                "order by priority";

                main.global_adapter = new SqlDataAdapter(selcom,
                                                         main.global_connection);

                kaf_set = new DataTable();

                main.global_adapter.Fill(kaf_set);

                foreach (DataRow dr in kaf_set.Rows)
                {
                    kaf_list.Items.Add(dr[1]);
                }

                if (Sel <= kaf_list.Items.Count)
                {
                    kaf_list.SelectedIndex = Sel;
                }
            }

            pe.Dispose();

            //сделать повторную загрузку в список групп
            //заполнить преподов по алфавиту
            string q = "select id, " +
                       " 'prepod' = prepod.fam  + ' ' + left(prepod.im,1)  + '. ' + left(prepod.ot,1) + '.', " +
                       " dolznost_id, stepen_id, zvanie_id, kafedra_id, phone, sex, address, actual, fam, im, ot " +
                       " from prepod " +
                       " where fam <> '0' " +
                       " order by fam, im, ot ";

            sda        = new SqlDataAdapter(q, main.global_connection);
            prepod_set = new DataTable();
            sda.Fill(prepod_set);

            prepod_list.Items.Clear();

            foreach (DataRow rr in prepod_set.Rows)
            {
                prepod_list.Items.Add(rr[1].ToString());
            }

            prepod_list.SelectedIndex = GetPosById(prepod_set, prepidn);
        }
        /// <summary>
        /// редактирование преподавателя
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            DataGridViewCell cell = dataGridView1.SelectedCells[0];
            int row = cell.RowIndex;

            int prep_id = (int)prep_set.Rows[row][13];

            prepod_edit pe = new prepod_edit();

            pe.prep_id = prep_id;

            pe.dolz_id           = (int)prep_set.Rows[row][8];
            pe.zvan_id           = (int)prep_set.Rows[row][10];
            pe.uch_id            = (int)prep_set.Rows[row][12];
            pe.kaf_id            = (int)kaf_set.Rows[kaf_list.SelectedIndex][0];
            pe.pictureBox1.Image = GetPhotoFromBD("prepod", prep_id);
            pe.deny_photo        = true;
            pe.zavkaf_id         = (int)kaf_set.Rows[sprav_prepods.kafedra_sel][3];


            pe.status_box.Checked = (bool)prep_set.Rows[row][14];
            if (pe.status_box.Checked)
            {
                pe.status_box.Text = "Статус: работает";
            }
            else
            {
                pe.status_box.Text = "Статус: уволен";
            }

            bool sex = (bool)prep_set.Rows[row][17];

            if (sex == false)
            {
                pe.female.Checked = true;
            }

            pe.fam.Text   = prep_set.Rows[row][1].ToString();
            pe.im.Text    = prep_set.Rows[row][2].ToString();
            pe.ot.Text    = prep_set.Rows[row][3].ToString();
            pe.phone.Text = prep_set.Rows[row][16].ToString();
            pe.email.Text = prep_set.Rows[row][18].ToString();

            DialogResult pres = pe.ShowDialog(); // -----------

            if (pres == DialogResult.Cancel)
            {
                return;
            }

            string famn    = pe.fam.Text.Trim();
            string imn     = pe.im.Text.Trim();
            string otn     = pe.ot.Text.Trim();
            int    kafidn  = pe.kaf_id;
            int    dolzn   = pe.dolz_id;
            int    stepidn = pe.uch_id;
            int    zvann   = pe.zvan_id;
            bool   actualn = pe.status_box.Checked;
            string addrn   = pe.email.Text.Trim();;
            string phonen  = pe.phone.Text.Trim();
            bool   sexn    = pe.male.Checked;

            //фото сохраняется отдельно

            SqlCommand cmd = new SqlCommand();

            cmd.Connection  = main.global_connection;
            cmd.CommandText = "select prepod.actual, " +
                              "  kafedra.name from prepod " +
                              " join kafedra on prepod.kafedra_id = kafedra.id " +
                              " where fam like @FAM and " +
                              " im like @IM and " +
                              " ot like @OT and " +
                              " sex = @SEX ";
            cmd.Parameters.Add("@FAM", SqlDbType.NVarChar).Value = famn;
            cmd.Parameters.Add("@IM", SqlDbType.NVarChar).Value  = imn;
            cmd.Parameters.Add("@OT", SqlDbType.NVarChar).Value  = otn;
            cmd.Parameters.Add("@SEX", SqlDbType.Bit).Value      = sexn;

            SqlDataAdapter sda = new SqlDataAdapter(cmd);

            DataTable oldprepods = new DataTable();

            sda.Fill(oldprepods);

            //добавить новую запись в БД
            cmd            = new SqlCommand();
            cmd.Connection = main.global_connection;

            cmd.CommandText = "update prepod set " +
                              "  fam = @FAM, im = @IM, ot = @OT,  " +
                              " kafedra_id = @KAFEDRA_ID, dolznost_id = @DOLZNOST_ID, " +
                              "  stepen_id = @STEPEN_ID, zvanie_id = @ZVANIE_ID,  " +
                              " actual = @ACTUAL, address = @ADDRESS, " +
                              "  phone = @PHONE, sex = @SEX " +
                              "  where id =  @PREPPID";

            cmd.Parameters.Add("@FAM", SqlDbType.NVarChar).Value     = famn;
            cmd.Parameters.Add("@IM", SqlDbType.NVarChar).Value      = imn;
            cmd.Parameters.Add("@OT", SqlDbType.NVarChar).Value      = otn;
            cmd.Parameters.Add("@KAFEDRA_ID", SqlDbType.Int).Value   = kafidn;
            cmd.Parameters.Add("@DOLZNOST_ID", SqlDbType.Int).Value  = dolzn;
            cmd.Parameters.Add("@STEPEN_ID", SqlDbType.Int).Value    = stepidn;
            cmd.Parameters.Add("@ZVANIE_ID", SqlDbType.Int).Value    = zvann;
            cmd.Parameters.Add("@ACTUAL", SqlDbType.Bit).Value       = actualn;
            cmd.Parameters.Add("@ADDRESS", SqlDbType.NVarChar).Value = addrn;
            cmd.Parameters.Add("@PHONE", SqlDbType.NVarChar).Value   = phonen;
            cmd.Parameters.Add("@SEX", SqlDbType.Bit).Value          = sexn;
            cmd.Parameters.Add("@PREPPID", SqlDbType.Int).Value      = prep_id;

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception exx)
            {
                MessageBox.Show("Неожиданный сбой при передаче данных.  " +
                                " Повтоите операцию ввода еще раз.",
                                "Ошибка передачи данных",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (pe.photochanged)
            {
                FilePhoto = pe.FilePhoto;
                save_prepod_photo_by_id(prep_id);
            }


            //проверить зав кафедрой
            if (pe.zav_changed)
            {
                //дать запрос и поставить в поле завкаф нулевого препода
                cmd = new SqlCommand("update kafedra set zav_kaf_id=69 where " +
                                     "id = " + kaf_set.Rows[kaf_list.SelectedIndex][0].ToString(),
                                     main.global_connection);
                cmd.ExecuteNonQuery();

                int Sel = kaf_list.SelectedIndex;

                //загрузить кафедры, получить активную
                string selcom = "select id, name_krat, name,  " +
                                " zav_kaf_id from kafedra " +
                                "where actual=1 " +
                                "order by priority";

                main.global_adapter = new SqlDataAdapter(selcom,
                                                         main.global_connection);

                kaf_set = new DataTable();

                main.global_adapter.Fill(kaf_set);

                foreach (DataRow dr in kaf_set.Rows)
                {
                    kaf_list.Items.Add(dr[1]);
                }

                if (Sel <= kaf_list.Items.Count)
                {
                    kaf_list.SelectedIndex = Sel;
                }
            }

            bool newzav = (pe.dolz_list.Text.ToLower().Trim().Contains("заведующий"));

            //сохранить данные нового зав каф
            if (newzav)
            {
                //дать запрос и поставить в поле завкаф нулевого препода
                cmd = new SqlCommand("update kafedra set zav_kaf_id=@ZAV where " +
                                     "id = " + kaf_set.Rows[kaf_list.SelectedIndex][0].ToString(),
                                     main.global_connection);
                cmd.Parameters.Add("@ZAV", SqlDbType.Int).Value = prep_id;
                cmd.ExecuteNonQuery();

                int Sel = kaf_list.SelectedIndex;

                //загрузить кафедры, получить активную
                string selcom = "select id, name_krat, name, zav_kaf_id from kafedra " +
                                "where actual=1 " +
                                "order by priority";

                main.global_adapter = new SqlDataAdapter(selcom,
                                                         main.global_connection);

                kaf_set = new DataTable();

                main.global_adapter.Fill(kaf_set);

                foreach (DataRow dr in kaf_set.Rows)
                {
                    kaf_list.Items.Add(dr[1]);
                }

                if (Sel <= kaf_list.Items.Count)
                {
                    kaf_list.SelectedIndex = Sel;
                }
            }


            pe.Dispose();

            //сделать повторную загрузку
            kaf_list_SelectedIndexChanged_1(sender, new EventArgs());
        }