Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
__Alexandra__
0 / 0 / 0
Регистрация: 06.07.2013
Сообщений: 3
1

Ошибка при поиске в DataGridView

06.07.2013, 14:42. Просмотров 776. Ответов 4
Метки нет (Все метки)

Добрый день!
Подскажите, пожалуйста, если кто знает.
У меня при повторном поиске в datagridview появляется ошибка о том, что "индексу не присвоено значение".
Поиск реализую так:
C#
1
2
3
4
5
6
7
8
for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                if (dataGridView1[a, i].Value.ToString().Contains(b.Text) == false)
                {
                    dataGridView1.Rows.RemoveAt(i);
                    i = i - 1;
                }
            }
При запуске нового поиска содержимое dataGridView обновляется:
C#
1
2
this.tbl_MainTableAdapter.Fill(this.patientDataSet.tbl_Main);
            dataGridView1.Refresh();
Если в столбце найдено N совпадений, то сообщение об ошибке говорит, что "индексу N не присвоено значение". Видимо, я где-то ссылаюсь на уже несуществующую ячейку?
В обратном направлении цикл уже тоже пускала, проблема та же.
(b - это Textbox).
Заранее спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2013, 14:42
Ответы с готовыми решениями:

Поиск по DataGridView. Ошибка при поиске по одному из полей
Помогите пожалуйста есть программа, на форме 3 организовал поиск по DataGridView по вводу данных в...

Ошибка при поиске в таблице БД MySQL
Здравствуйте, не могу понять в чем ошибка.

Ошибка при обновлении данных в БД из DataGridView при определенном условии
Собственно проблема в следующем... в приложение добавил обновление БД из dgv. Сделано по примеру,...

Ошибка при обновлении datagridview
Здравствуйте! Такая проблема! Есть datagrid. Первый раз, когда я выполняю запрос все работает...

Ошибка при сохранении изменений в DataGridView
Доброго времени суток! Ребята выручайте! При нажатии на кнопку должны сохраняться изменения, но...

4
__Alexandra__
0 / 0 / 0
Регистрация: 06.07.2013
Сообщений: 3
08.07.2013, 23:27  [ТС] 2
Проблему я не решила, но, если кто-то с такой столкнется, расскажу, как обошла ее.
Событие при нажатии кнопки "Поиск" теперь вызывает новую форму с новым datagridview, здесь и происходит удаление ненужных строк.

И еще, чтоб не менять в цикле значение счетчика вручную, отдельно выполняется поиск индексов строк которые надо удалить и отдельно цикл удаления этих строк.
0
Kruds
697 / 697 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
Завершенные тесты: 1
09.07.2013, 13:57 3
Воспользуйтесь BindingSource и его свойством Filter. Не придется кошмарить грид.
1
pincet
1382 / 966 / 130
Регистрация: 23.07.2010
Сообщений: 5,226
09.07.2013, 18:31 4
Прямой поиск (LINQ)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    private void Find(string obj)
        {
                       
            if ((int)this.Columns[this.CurrentCell.ColumnIndex].Tag == 1)
            #region TextBox
            {
                var res = from DataGridViewRow c in this.Rows
                          where String.Compare(obj, 0, c.Cells[this.CurrentCell.ColumnIndex].Value.ToString(), 0, obj.Length) == 0
                          select c;
                if (!res.Any())
                    CanGoOn = false;                    
                else
                {
                    CurrentCell = this[CurrentCell.ColumnIndex, res.First().Index];
                    CanGoOn = true;
                }
            }
            #endregion
            else
            #region ComboBox
            {
                DataGridViewComboBoxColumn DGVCBC = (DataGridViewComboBoxColumn)this.Columns[this.CurrentCell.ColumnIndex];
 
                var res = from c in ((DataTable)DGVCBC.DataSource).AsEnumerable()
                          where string.Compare(obj, 0, c.Field<string>(DGVCBC.DisplayMember.ToString()), 0, obj.Length) == 0
                          select c.Field<int>(DGVCBC.ValueMember.ToString());
                if (!res.Any())
                    CanGoOn=false;
                else
                {
                    var res1 = from DataGridViewRow c in this.Rows
                               where !c.Cells[this.CurrentCell.ColumnIndex].Value.Equals(DBNull.Value) &&
                               res.Contains((int)c.Cells[this.CurrentCell.ColumnIndex].Value)
                               select c;
                    if (!res1.Any())
                        CanGoOn = false;
                    else
                    {
                        CurrentCell = this[CurrentCell.ColumnIndex, res1.First().Index];
                        CanGoOn = true;
                    }
                }
            }
            #endregion
            
        }
1
__Alexandra__
0 / 0 / 0
Регистрация: 06.07.2013
Сообщений: 3
09.07.2013, 19:22  [ТС] 5
Спасибо.
Еще один удобный вариант: поиск реализовать в хранимой процедуре и просто ее вызывать.
0
09.07.2013, 19:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2013, 19:22

Ошибка при просмотре записей в DataGridView
Просто DataGridView присваиваю Bindingsource. При запуске программы просматриваю отображенные...

При удалении из dataGridView появляется ошибка
При удалении из dataGridView появляется ошибка подскажите пожалуйста в чем причина код ...

Ошибка при добавлении данных в datagridview
Есть бд сделанная в acess. При добавлении данных в одной форме,они должны перейти на другую и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru