Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 12:52   #1
NZero
Пользователь
 
Аватар для NZero
 
Регистрация: 16.04.2010
Сообщений: 35
По умолчанию Индекс за пределами диапазона

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

Причем это сообщение выскакивает только там, где есть combobox!
NZero вне форума Ответить с цитированием
Старый 14.12.2010, 13:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код в студию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2010, 13:37   #3
NZero
Пользователь
 
Аватар для NZero
 
Регистрация: 16.04.2010
Сообщений: 35
По умолчанию

Код:
private void правитьToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            MySqlConnection con = null;
            try
            {
                con = new MySqlConnection(Settings.Default.conect);
                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();        
        }
NZero вне форума Ответить с цитированием
Старый 14.12.2010, 15:09   #4
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Сразу возникает вопрос: а как SotrdataGridView обновляется после правки? Все ли поля заполняются?
Hollander вне форума Ответить с цитированием
Старый 14.12.2010, 15:17   #5
NZero
Пользователь
 
Аватар для NZero
 
Регистрация: 16.04.2010
Сообщений: 35
По умолчанию

Да все поля заполняются, которые я заполнил! Но мне сдается это связанно из-за того, что таблица связанна с другой таблицей!
NZero вне форума Ответить с цитированием
Старый 15.12.2010, 09:55   #6
NZero
Пользователь
 
Аватар для NZero
 
Регистрация: 16.04.2010
Сообщений: 35
По умолчанию

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

Последний раз редактировалось NZero; 15.12.2010 в 15:54.
NZero вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Курсор за пределами рабочего стола HollyPaladin Win Api 11 31.12.2010 21:14
Параметры в Adoquery, Обнаружены символы за пределами инструкции SQL ulala Помощь студентам 0 15.10.2010 15:38
Индекс не срабатывает GenniY БД в Delphi 4 24.11.2009 15:05
Можно ли рисовать за пределами формы? TwiX Общие вопросы Delphi 3 14.09.2009 11:56
Буфер обмена за пределами нашего приложения soufee Win Api 17 15.07.2008 22:58