Индекс за пределами диапазона

Henior

Всем привет! Есть datagridview, которая выводит информацию из бд. Есть выпадающее меню, в котором есть добавить, править, удалить, при нажатии на которые вызываются новые формы, кроме удалить. Так вот проблема заключается в том, что если я повторно вызываю править то вылезает такое сообщение: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Имя параметра: index Причем это сообщение выскакивает только там, где есть combobox!
10 ответов

Henior

У меня была похожая ситуация, когда я вызывал диалог открытия файла, а потом ничего не выбрав, закрывал его. Лучший вариант это заключить код в try - catch . Или же высылай проект... посмотрим.


Henior

Высылаю проект! Заключал в try - catch все равно не помогает(((


Henior

не распаковывается.


Henior

Вот должно распаковаться!


Henior

значит не то ты заключиллучше покажи кусок кода и строку на которой выскакивает ошибка


Henior

 con.Open();
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message, "Ошибка подключения БД");
                con.Dispose();
                return;
            }
            if (this.SotrdataGridView.Rows.Count != 0)
            {
                int Index = this.SotrdataGridView.CurrentRow.Index;
                editsotr editsotr = new editsotr();
                editsotr.Text = "Сотрудник: править";
                editsotr.ButtonIU.Text = "Править";
                editsotr.textsurname.Text = this.SotrdataGridView[1, Index].Value.ToString();
                editsotr.textname.Text = this.SotrdataGridView[2, Index].Value.ToString();
                editsotr.textsecondname.Text = this.SotrdataGridView[3, Index].Value.ToString();
                editsotr.textpost.Text = this.SotrdataGridView[4, Index].Value.ToString();
                editsotr.comboboxiddep.Text = this.SotrdataGridView[5, Index].Value.ToString();
                editsotr.texttabn.Text = this.SotrdataGridView[6, Index].Value.ToString(); //На эту строчку ругается
                editsotr.ShowDialog(this);
                //изменить данные сотрудников
                if (editsotr.DialogResult == DialogResult.OK)
                {
                    int tn = 0;
                    tn = int.Parse(editsotr.Tabn);
                    MySqlCommand esotr = con.CreateCommand();
                    MySqlCommand edep = con.CreateCommand();
                    MySqlCommand col = con.CreateCommand();
                    MySqlDataAdapter mda = new MySqlDataAdapter();
                    esotr.CommandText = "update sotr set surname ='" + editsotr.Surname + "', name ='"
                        + editsotr.Name_ + "', secondname ='" + editsotr.Secondname + "', post ='"
                        + editsotr.Post + "', id_dep=" + editsotr.comboboxiddep.SelectedValue + ", tabn ="
                        + tn.ToString() + " where id =" + SotrdataGridView[0, Index].Value.ToString() + ";";
                    edep.CommandText = "update depart set col_sotr = col_sotr - 1 where title = '" + this.SotrdataGridView[5, Index].Value.ToString() + "';";
                    col.CommandText = "update depart set col_sotr = (select count(*) from sotr where id_dep = "
                        + editsotr.comboboxiddep.SelectedValue + ") where id = " + editsotr.comboboxiddep.SelectedValue + ";";
                    string selsotr = "select s.surname, s.name, s.secondname, s.post, d.title, s.tabn from sotr s inner join depart d on s.id_dep = d.id order by surname, name, secondname;";
                    DataSet ds = new DataSet();
                    mda.SelectCommand = new MySqlCommand(selsotr, con);
                    mda.Fill(ds, "sotr");
                    esotr.ExecuteNonQuery();
                    edep.ExecuteNonQuery();
                    col.ExecuteNonQuery();
                    mda.Update(ds, "sotr");
                    con.Close();
                }
            }
            //Обновление таблицы сотрудников
            MySqlDataAdapter md = new MySqlDataAdapter();
            string ssotr = "select s.surname, s.name, s.secondname, s.post, d.title, s.tabn from sotr s inner join depart d on s.id_dep = d.id order by surname, name, secondname;";
            md.SelectCommand = new MySqlCommand(ssotr, con);
            DataSet dset = new DataSet();
            md.Fill(dset, "sotr");
            this.SotrdataGridView.DataSource = dset.Tables["sotr"];
            con.Close();
            //Обновление таблицы отделов
            string sdep = "select * from depart";
            md.SelectCommand = new MySqlCommand(sdep, con);
            md.Fill(dset, "depart");
            this.DepdataGridView.DataSource = dset.Tables["depart"];
            con.Close();        
        }


Henior

на какой строке выскакивает?


Henior

Я же там указал!
editsotr.texttabn.Text = this.SotrdataGridView[6, Index].Value.ToString();
kenny69, а где находится это finally?


Henior

а где находится это finally?
http://msdn.microsoft.com/ru-ru/library/dszsf989.aspx


Henior

Все разобрался, надо было в таблицу добавить еще один столбец))) Всем спасибо!