Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
49 / 49 / 3
Регистрация: 15.11.2009
Сообщений: 372

Не работает поиск по массиву данных + datagridview

14.04.2010, 00:11. Показов 1360. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Помогите пожалуйста с задачей - происходит что-то непонятное(((
Суть задачу в том, что пользователь вводит фамилию, номер машины и код региона и всё это заноситься в datagridview. Затем в поле для поиска пользователь может ввести фалилию , и если эта фамилия есть в базе , то уже в другой textbox выводится количество машин, зарегистрированных на этого человека.
ПРОБЛЕМА в том, что почему то поле для вывода количества машин не выводит его(((((((((((((((((
ps самое интересное в том, что на другом компе запускал и всё шло , а на другом не идет((((((

Вот проект:
Вложения
Тип файла: rar HomeWork.rar (50.6 Кб, 21 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.04.2010, 00:11
Ответы с готовыми решениями:

Бинарный поиск по массиву не корректно работает
Почему мой бинарный поиск массива не корректно работает? using System; using System.Collections.Generic; using System.Linq;...

Поиск по большому массиву данных
Люди, подскажите кто знает или может встречался с этим! Перечитала кучу всего, но конкретной инфы не нашла. Есть таблица с 2-мя полями:...

Поиск по таблице базы данных по массиву переменных
Доброго времени суток! у меня существует база данных, в которых внесена одна таблица. в этой таблице необходимо совершить поиск по...

7
49 / 49 / 3
Регистрация: 15.11.2009
Сообщений: 372
14.04.2010, 13:29  [ТС]
Вот сам код:
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
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.Collections;
 
namespace HomeWork
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }
        ArrayList data = new ArrayList(); //динамический массив для хранения сделанных автомобилей
 
        //Кнопка "Внести в таблицу"
        private void ButtonInput_Click(object sender, EventArgs e) 
        {
            string owner = Car.CheckSurname(textBoxOwner.Text);  //проверяем введенные данные в разных методах, и в зависимости от результата создаем новый автомобиль или неичего не делаем (в случае введения некорректных данных)
            if (owner != "<Ошибка>")
            {
                string number = Car.CheckNumber(textBoxNumber.Text);
                if (number != "<Ошибка>")
                {
                    int code = Car.CheckCodeType(textBoxCode.Text);
                    if (code != 0)
                    {
                        code = Car.CheckCodeInterval(code, 1, 99);
                        if (code != 0)
                        {
                            //если все данные верны
                            dataGridView.Rows.Add(owner, number, code);     //добавляем строку в таблицу
                            buttonSave.Enabled = true;                          //делаем доступной кнопку Сохранить
 
                            Car automobile = new Car(owner, number, code); //создаем новый автомобиль =)
                            data.Add(automobile);                            //добаваляем автомобиль в массив
                        }
                    }
                }
            }
 
 
        }
 
        private void buttonClose_Click(object sender, EventArgs e)
        {
            Close();
        }
 
        private void buttonDelete_Click(object sender, EventArgs e)
        {
            DataGridViewRow dstr = dataGridView.CurrentRow;
            dataGridView.Rows.Remove(dstr);
        }
 
        private void buttonDeleteAll_Click(object sender, EventArgs e)
        {
            dataGridView.Rows.Clear();       //стираем таблицу и массив при нажатии на кнопку Очистить
            data.Clear();
            buttonSave.Enabled = false;        //делаем функцию сохранения не активной
 
        }
 
        private void buttonSearch_Click(object sender, EventArgs e)
        {
            Car c;
            string str = textBoxOwner.Text;
            int n = 0;
                for (int i = 0; i < data.Count; i++)
                {
                    c = (Car)data[i];
                    if (str == c.Owner) 
                        n++;
 
                }
                textBoxNumCar.Text = n.ToString();
          
        }
 
         
    }
}
 
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
 
namespace HomeWork
{
    public class Car
    {
        private string owner;  //владелец автомобиля
        private string number;  //номер автомобиля
        private int code;  //код региона
 
        //Свойства
        public string Owner { get { return owner; } set { owner = value; } }     //владелец
        public string Number { get { return number; } set { number = value; } }  //номер автомобиля
        public int Code { get { return code; } set { code = value; } }  //код региона
 
            
 
        //Конструктор
        public Car(string Owner, string Number, int Code)
        {
            this.Owner = Owner;
            this.Number = Number;
            this.Code = Code;
        }
 
        //Метод для проверки введённой фамилии
        public static string CheckSurname(string surname)      
        {
            string s = surname.ToUpper();         //преобразуем все символы в фамилии в заглавные
 
            if (surname.Length == 0 || surname.Length == 1 || surname.Length == 2 || surname.Length > 20)  //проверяем длину строки
            {
                MessageBox.Show("Ошибка! Прочитайте инструкцию!", "Ошибка ввода");
                return "<Ошибка>";  //возвращаем строку <Ошибка> если условие не выполняется
            }
 
            else
            {
                for (int i = 0; i < surname.Length; i++)
                {
                    if ((s[i] < 'А') || (s[i] > 'Я'))    //проверяем что все символы в строке - буквы
                    {
                        MessageBox.Show("Ошибка! Прочитайте инструкцию!", "Ошибка ввода");
                        break;  //если нет - выходим из цикла и возвращаем строку <Ошибка>
                    }
                    else  //выполняем если слово состоит из букв
                    {
                        if (i == (surname.Length - 1))
                        {
                            string fl = (s[0].ToString()).ToUpper(); //первая буква в строке - делаем ее заглавной    
 
                            s = fl;
                            for (int j = 1; j < surname.Length; j++) //цикл для "составления" слова заново
                            {
                                s = s + (surname[j].ToString()).ToLower(); //"Составляем" слово заново
                            }
 
                            return s;  //В результате получае фамилию владельца, написанную с заглавной буквы. Эту строку и возвращаем
                        }
                    }
                }
                return "<Ошибка>";     //возвращаем строку <Ошибка>
            }
        }
 
        //Метод для проверки введённого номера машины
        public static string CheckNumber(string number)   
        {
            if (number.Length == 6) return number;
            else
            {
                MessageBox.Show("Ошибка! Прочитайте инструкцию!", "Ошибка ввода");  //в случае несоответствия выдаем сообщение об ошибке
                return "<Ошибка>";        //возвращаем строку <Ошибка> если условие не выполняется
            }
        }
 
        //Метод для проверки типа кода
        public static int CheckCodeType(string type)
        {
            int tryme = 0;
            try                                     //проверяем тип переменной
            {
                tryme = int.Parse(type);
                return tryme;                       //если переменная целого типа, возвращаем ее
            }
            catch                                    //если тип не int, выводим предупреждение и возвращаем 0
            {
                MessageBox.Show("Ошибка! Прочитайте инструкцию!", "Ошибка ввода");
                return 0;                           //возвращаем 0 в случае ошибки
            }
        }
 
        //метод проверяет, попала ли переменная в заданный интервал
        public static int CheckCodeInterval(int interval, int min, int max)
        {
            interval = CheckCodeType(interval.ToString());      //вызываем TryInt, проверяем что переменная целая
            if (interval < min || interval > max)
            {
                MessageBox.Show("Ошибка! Прочитайте инструкцию!", "Ошибка ввода");
                return 0;                            //возвращаем 0 если переменная не попала в интервал
            }
 
            else return interval;                 //возвращаем значение, попадающее в интервал
        }
 
 
 
        
    }
}
Добавлено через 38 секунд
Здесь 2 файла

Добавлено через 23 минуты
блиин теперь нигде не запускается(((((((((((((((((((((

Добавлено через 30 секунд
Кто-нибудь помогите пожалуйста

Добавлено через 46 секунд
Выделю отдельно метод поиска:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void buttonSearch_Click(object sender, EventArgs e)
        {
            Car c;
            string str = textBoxOwner.Text;
            int n = 0;
                for (int i = 0; i < data.Count; i++)
                {
                    c = (Car)data[i];
                    if (str == c.Owner) 
                        n++;
 
                }
                textBoxNumCar.Text = n.ToString();
          
        }
Добавлено через 12 часов 51 минуту
Ну поможет кто-нибудь или нет ? (((((
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
14.04.2010, 14:48
У меня работает.
Поиск-то работает, но при удалении строки с DataGrid, не происходит удаление элемента из массива. Следовательно, при вводе фамилии, он все равно будет показывать то количество машин, которые мы зарегистрировали на эту фамилию.
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
14.04.2010, 16:00
Вот, немного изменил твой код. думаю, что так будет более удобно и функционально.
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
public partial class FormMain : Form
    {
        int index;// kirill29
 
        public FormMain()
        {
            InitializeComponent();
        }
        // изменил тип коллекции kirill29
        List<Car> data = new List<Car>(); //динамический массив для хранения сделанных автомобилей
 
        //Кнопка "Внести в таблицу"
        private void ButtonInput_Click(object sender, EventArgs e) 
        {
            ...
        }
 
        private void buttonClose_Click(object sender, EventArgs e)
        {
            Close();
        }
        // изменил kirill29
        private void buttonDelete_Click(object sender, EventArgs e)
        {
            if (index != -1)
            {
                for (int i = 0; i < data.Count; i++)
                {
                    if (data[i].Owner == dataGridView[0, index].Value.ToString()&&data[i].Number==dataGridView[1, index].Value.ToString()&&data[i].Code==Convert.ToInt32(dataGridView[2, index].Value))
                    {
                        data.RemoveAt(i);
                    }
                }
                dataGridView.Rows.RemoveAt(index);
            }
        }
 
        private void buttonDeleteAll_Click(object sender, EventArgs e)
        {
           ...
        }
 
        private void buttonSearch_Click(object sender, EventArgs e)
        {
            ...
        }
        // добавил kirill29
        private void dataGridView_MouseDown(object sender, MouseEventArgs e)
        {
            dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            index = dataGridView.HitTest(e.X, e.Y).RowIndex;
        }
    }
Вложения
Тип файла: rar HomeWork.rar (102.1 Кб, 19 просмотров)
1
49 / 49 / 3
Регистрация: 15.11.2009
Сообщений: 372
14.04.2010, 17:52  [ТС]
спасибо вам за помошь, но у вас точно получается поиск?

можете поподробнее объяснить эти записи ?

Цитата Сообщение от kirill29 Посмотреть сообщение
List<Car> data = new List<Car>();

Цитата Сообщение от kirill29 Посмотреть сообщение
if (data[i].Owner == dataGridView[0, index].Value.ToString()&&data[i].Number==dataGridView[1, index].Value.ToString()&&data[i].Code==Convert.ToInt32(dataGridView[2, index].Value))
Цитата Сообщение от kirill29 Посмотреть сообщение
private void dataGridView_MouseDown(object sender, MouseEventArgs e)
{
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
index = dataGridView.HitTest(e.X, e.Y).RowIndex;
}
Добавлено через 8 минут
почему ваш файл весит в 2 раза больше, хотя в нём ничего не изменилось ?
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
14.04.2010, 21:08
Цитата Сообщение от Helios1.618 Посмотреть сообщение
List<Car> data = new List<Car>();
Создаем коллекцию на основе класса Car. В данном случае удобней получение данных об определенном автомобиле.

Цитата Сообщение от Helios1.618 Посмотреть сообщение
if (data[i].Owner == dataGridView[0, index].Value.ToString()&&data[i].Number==dataGridView[1, index].Value.ToString()&&data[i].Code==Convert.ToInt32(dataGridView[2, index].Value))
Находим запись в коллекции, которая равна записи, выделенной в dataGrid, и удаляем ее.
Запись длинная потому-что может быть один владелец, один номер, но разные коды регионов. Поэтому для более точной определения строки, используем все поля класса Car.

Цитата Сообщение от Helios1.618 Посмотреть сообщение
private void dataGridView_MouseDown(object sender, MouseEventArgs e)
{
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
index = dataGridView.HitTest(e.X, e.Y).RowIndex;
}
C помощью этого события и вложенного кода определяем индекс выделенной строки в DataGrid.
Цитата Сообщение от Helios1.618 Посмотреть сообщение
но у вас точно получается поиск?
Да. Проверял - все работает. И после удаления записи при поиске соответственно количество машин уменьшается.
Цитата Сообщение от Helios1.618 Посмотреть сообщение
почему ваш файл весит в 2 раза больше, хотя в нём ничего не изменилось ?
Как не изменилось. если посмотреть внимательно все папки, то можно увидеть, что в архиве лежит две копии проекта. Просто я измененный проект добавил в существующий архив, а не создавал новый.
1
49 / 49 / 3
Регистрация: 15.11.2009
Сообщений: 372
14.04.2010, 21:29  [ТС]
большое вам спасибо
если вам не трудно вы не могли бы посоветовать, какую-нибудь статью, справочник или книгу , в которой подробно изложен материал по DataGridView (свойства, методы и т.д.) ?
0
 Аватар для wwowa
308 / 261 / 70
Регистрация: 01.12.2008
Сообщений: 1,031
15.04.2010, 08:12
<Ссылка>
И там же еще 2 статьи есть .
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2010, 08:12
Помогаю со студенческими работами здесь

Как сделать быстрый поиск по массиву разнотипных данных?
Как сделать быстрый поиск по массиву и разнотипных данных?

Не работает поиск в DataGridView
Ошибка в коде программы.Ниже исходник.

Не работает поиск в dataGridView из БД Access
В общем проблема такова мне нужно произвести поиск в DGW по параметру. Все вроде бы как работает если столбцы созданы в самом DGW, но если...

Поиск по базе данных и вывод в datagridview
Помогите, пожалуйста! У меня есть datagridview, куда выводится таблица из базы данных MySQL. Как можно сделать так, чтобы можно было...

Поиск данных в базе sql через datagridview
Всем привет. у меня есть datagridview1 comboBox1 и comboBox2. MySqlConnection con = new MySqlConnection(&quot;Database=bouling; Data...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru