Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/75: Рейтинг темы: голосов - 75, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 06.12.2015
Сообщений: 36

Поиск по столбцу в datagridview

04.12.2016, 23:03. Показов 15403. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. В общем, есть у меня форма, где я из txt-файла вывожу инфу в datagridview. Потом я на второй форме, которую вызываю через menustrip, хочу осуществить поиск по указанному столбцу. Прикрутил я туда combobox и textbox. Но вот уже несколько часов играюсь с этим делом. Знаю, при работе с БД это сделать легче. Да и инфы в Интернете полно по этому поводу. Но вот как это сделать при считывании инфы именно с текстового файла... Если кто знает, подскажите, пожалуйста. Вот код первой и второй формы:

Form1
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Media;
 
 
namespace DataBase
{
    public partial class Form1 : Form
    {
        SoundPlayer sp;
        public Form1()
        {
            InitializeComponent();
 
            sp = new SoundPlayer();
            sp.Stream = Properties.Resources.Night_Train;
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void saveToolStripMenuItem_Click(object sender, EventArgs e)
        {            
            Stream myStream;
 
            saveFileDialog1.Filter = "GD files (*.gd)|*.gd|txt files (*.txt)|*.txt";
            saveFileDialog1.FilterIndex = 2;
            saveFileDialog1.RestoreDirectory = true;
 
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                if ((myStream = saveFileDialog1.OpenFile()) != null)
                {
                    StreamWriter myWritet = new StreamWriter(myStream);
                    try
                    {
                        for (int i = 0; i < dataGridView1.RowCount; i++)
                        {
                            for (int j = 0; j < dataGridView1.ColumnCount; j++)
                            {
                                myWritet.Write(dataGridView1.Rows[i].Cells[j].Value.ToString() + " ");
                            }
                            myWritet.WriteLine();
                        }
                    }
                    catch (Exception ex)
                    {
                        //MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        myWritet.Close();
                    }
                    myStream.Close();
                }
            }
        }
 
        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
 
        }
 
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Stream myStream = null;
            openFileDialog1.Filter = "GD files (*.gd)|*.gd|txt files (*.txt)|*.txt";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
 
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                if ((myStream = openFileDialog1.OpenFile()) != null)
                {
                    StreamReader myReader = new StreamReader(myStream);
                    string[] str;
                    int num = 0;
 
                    try
                    {
                        string[] str1 = myReader.ReadToEnd().Split('\n');
                        num = str1.Count();
                        dataGridView1.RowCount = num;
 
                        for (int i = 0; i < num; i++)
                        {
                            str = str1[i].Split(' ');
    
                            for (int j = 0; j < dataGridView1.ColumnCount; j++)
                            {
                                dataGridView1.Rows[i].Cells[j].Value = str[j];
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        //MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        myReader.Close();
                    }
                }
            }
        }
 
        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            sp.Play();
        }
 
        private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Railway Terminal\n\nVersion: 0.7.0 (Alpha)",
           "About", MessageBoxButtons.OK,
           MessageBoxIcon.Information);
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("*   SV(FCS) - Sleep Vagon (Firs Class Sleep)\n** CC - Cattle Carriage\n***SCS - Second Class Sleep (Coupe)",
            "Description", MessageBoxButtons.OK,
            MessageBoxIcon.Information);
        }
 
        private void clearTheTableToolStripMenuItem_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                for (int j = 0; j < dataGridView1.ColumnCount; j++)
                {
                    dataGridView1.Rows.Clear();
                }
            }
        }
 
        private void playToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sp.Play();
        }
 
        private void stopToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sp.Stop();
        }
 
        private void searchToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.TopLevel = true;
            f2.Show();
        }
    }
}
Form2:
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace DataBase
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
 
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.Text == "Train ID")
            {
 
 
            }
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.12.2016, 23:03
Ответы с готовыми решениями:

Поиск по столбцу dataGridView
Здравствуйте! Такой вопрос. Есть кнопка, при нажатие на него добавляется в первом столбце dataGridView сегодняшняя дата. Теперь хочу...

DataGridView. Поиск по определенному столбцу
Делаю прогу по взаимодействию с БД. Хочу сделать поиск в опредеоенном столбце (где совподает хоть 1-но слово).Но возникла проблема . Вот...

Поиск по одному столбцу в DataGridView
как искать только по одному столбцу? пожалуйста помогите, ищу всю ночь не могу найти решение

14
0 / 0 / 0
Регистрация: 06.12.2015
Сообщений: 36
04.12.2016, 23:15  [ТС]
Вот скриншоты форм:

Название: 2.jpg
Просмотров: 882

Размер: 16.8 Кб

Мне хотя бы пример... Можно даже на одной форме это сделать, не обязательно на двух..
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
04.12.2016, 23:56
Считывание данных довольно простая штука

C#
1
2
3
4
5
6
7
8
9
10
Forms Code
{
       private void button1_Click(object sender, EventArgs e)
       {
        String s;
         s = textBox1.Text;
         Double db = Double.Parse(s); // Считывание действ. чисел
          int n = int.Parse(s); // То же целых
       }
}
1
0 / 0 / 0
Регистрация: 06.12.2015
Сообщений: 36
05.12.2016, 00:35  [ТС]
Это да. Но вот как искать данные по нужному столбцу? Как сделать привязку textbox'a и combobox'a к нужному столбцу?
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
05.12.2016, 14:16
Это тоже довольно просто.
Затените в dataGridView1 нужную ячейку и кликните кнопку1

C#
1
2
3
4
5
6
7
8
9
10
11
12
Forms Code
{
       private void button1_Click(object sender, EventArgs e)
       {
         int nrow, ncol;
           String s = textBox1.Text;
           ncol = dataGridView1.CurrentCell.ColumnIndex;
            nrow = dataGridView1.CurrentCell.RowIndex;
           dataGridView1.Rows[nrow].Cells[nccol].Value = s;
 
      }
}
1
0 / 0 / 0
Регистрация: 06.12.2015
Сообщений: 36
06.12.2016, 00:36  [ТС]
Ну вот, пробовал сравнивать значения текстбокса и ячейки DGV. В итоге ничего не получилось. Вылезла ошибка "System.NullReferenceException" - в экземпляре объекта не задана ссылка на объект. Убил уже много часов, но так ничего и не получилось. Либо просто не ищет, либо ошибка...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void button4_Click(object sender, EventArgs e) // Search
        {
           // int nrow, ncol;
            String s = textBox1.Text;
           // ncol = dataGridView1.CurrentCell.ColumnIndex;
           // nrow = dataGridView1.CurrentCell.RowIndex;
 
            for (int i = 0; i < dataGridView1.RowCount; i++)
             {
                 for (int j = 0; j < dataGridView1.ColumnCount; j++)
                 {
                     if (comboBox1.Text == "Final_Station" && dataGridView1.Rows[i].Cells[3].Value.ToString() == s)
                         dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.GreenYellow;
                 }
             }
        }
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
06.12.2016, 01:02
Я сделал код, чтобы передать данные из текстбокса в датагрид, проверил, все работает.
Напишите конкретно, что нужно
0
0 / 0 / 0
Регистрация: 06.12.2015
Сообщений: 36
06.12.2016, 01:13  [ТС]
Да, в датагрид все передается правильно. Но мне нужно вот что: имеется заполненный датагрид с текстового файла. Потом нужно сравнить значения в текстбоксе со значением ячеек необходимого столбца. И если значение текстбокса совпадет со значением какой-то ячейки, допустим, 4-го столбца, то я выделяю либо ее, либо строку с ней цветом (это я умею).
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
06.12.2016, 11:35
" имеется заполненный датагрид с текстового файла. Потом нужно сравнить значения в текстбоксе со значением ячеек необходимого столбца. И если значение текстбокса совпадет со значением какой-то ячейки, допустим, 4-го столбца, то я выделяю либо ее, либо строку с ней цветом (это я умею). "

Условие не очень труднле.
Вопросы
1.Кто вводит данные в текстбокс
2. Кто задает столбец
3.Если есть совпадения, то в коде я запишу

if(dataDridView1... == textBox1.Text)
{
Тут идет Ваш код выделения цвета

}

Правильно?
0
36 / 32 / 23
Регистрация: 28.12.2015
Сообщений: 264
06.12.2016, 14:01
Вот, вроде то, что тебе нужно.
C#
1
2
3
4
5
6
7
8
9
for (int i = 0; i < this.dataGridView1.RowCount; i++)
{
    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.White;
    if (dataGridView1.Rows[i].Cells[textBox1.Text].Value.ToString().Contains(textBox2.Text))
    {
        dataGridView1.Rows[i].Cells[textBox1.Text].Style.BackColor = Color.Green;
        break;
    }
}
textBox1.Text - столбец
textBox2.Text - искомая строка
1
0 / 0 / 0
Регистрация: 06.12.2015
Сообщений: 36
06.12.2016, 15:37  [ТС]
Спасибо Вам большое! Теперь все ищет. Только еще один вопрос: как сделать, чтобы находилось и выделялось два и больше совпадения. Если убрать break, то опять выскочит ошибка. Хотя, сейчас попробую сам решить эту проблему.
0
36 / 32 / 23
Регистрация: 28.12.2015
Сообщений: 264
06.12.2016, 15:40
Gipsy Danger, не должно быть ошибки, если убрать break
0
0 / 0 / 0
Регистрация: 06.12.2015
Сообщений: 36
06.12.2016, 15:55  [ТС]
Ну вот. Я из-за этого вчера несколько часов просидел..
Миниатюры
Поиск по столбцу в datagridview  
0
36 / 32 / 23
Регистрация: 28.12.2015
Сообщений: 264
06.12.2016, 16:02
Gipsy Danger, у меня работает. Убрал break и при поиске выделяет соответствующие ячейки указанного столбца.
0
0 / 0 / 0
Регистрация: 06.12.2015
Сообщений: 36
06.12.2016, 16:12  [ТС]
Все, разобрался. Добавил try и catch. Не знаю, в чём именно была загвоздка, но теперь все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2016, 16:12
Помогаю со студенческими работами здесь

Осуществить поиск по одному столбцу в DataGridView
Необходимо осуществить поиск только по одному столбцу в DataGridView с выделением найденных строк. то есть найти все повторяющиеся...

Фильтр по столбцу dataGridView
Всем привет! Есть такой код private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { ...

Фильтр по столбцу DataGridView
Дана база данных textbox1 фильтрует по всей базе с помощью кнопки поиск нужно сделать с textbox2 фильтр который фильтрует столбец Номер...

Сортировка по столбцу dataGridView
Здравствуйте! Можно обратиться?! У меня сортируются данные по всем столбцам нормально. Когда, например, я захотела отсортировать по...

Сортировка по столбцу в datagridview
У меня есть класс, он выводится в datagridview, мне необходимо отсортировать его по полю articles и вывести отсортированные данные снова в...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru