С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
1

Как перейти по ссылке, которая находится в dataGridView ?

31.10.2016, 23:39. Показов 1882. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Из Access данные импортируются в dataGridView
Каждый dataGridView отдельно подключён к источнику данных.
Каждый dataGridView фильтруется по двум параметрам
Нажимаем кнопку и переходим по ссылке в dataGridView (используем Selenium)

** СЦЕНАРИЙ
1. Вводим путь к файлу Access в "TextBox1";
2. Нажимаем кнопку "button1" ;
3. В результате код создаёт для:
- dataGridView 1 - соединение BindingSource1
- dataGridView 2 - соединение BindingSource2
4. Дополнительно данные в dataGridView 1 и dataGridView 2 фильтруются по двум параметрам в каждой.

** КОД
Код программы
Кликните здесь для просмотра всего текста
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
  public partial class Form1 : Form
    {
        BindingSource bs, bs1;
        IWebDriver Browser;
 
        public Form1()
        {
            InitializeComponent();           
        }
                
 
        private void button1_Click(object sender, EventArgs e)
        {
                        
            string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", textBox1.Text);
            using (OleDbConnection conn = new OleDbConnection(connString))
            {
                
                string commText = "SELECT Код, ID, nom, наименование, кол, url1 FROM tabl1"; //запрос пишите свой!!!
                
                OleDbCommand comm = new OleDbCommand(commText, conn);
 
                /// *** DGRV 1
                bs = new BindingSource();                
                DataTable table = new DataTable();
                OleDbDataAdapter adapter = new OleDbDataAdapter(comm);
                adapter.Fill(table);
                bs.DataSource = table;
                dataGridView1.DataSource = bs; //если на форме есть DataGridView (типа dataGridView1), выводите туда!
 
 
                // * DGRV 1 ФИЛЬТР по диапазону
                string filter;
                filter = string.Format(" [nom] >= 11 and [nom] <= 13");//добавляем условие для фильтрации по второму полю
                bs.Filter = filter; //применяем фильтр
 
 
 
                /// *** DGRV 2
                    ....
 
                // * DGRV 2 ФИЛЬТР по диапазону
                    ...
 
            }
        }
 
        // ФИЛЬТРАЦИЯ ПО ID
        private void button2_Click(object sender, EventArgs e)
        {
            // ФИЛЬТРАЦИЯ ПО ID DGRV 1 
            if (textBox2.Text != string.Empty)
                bs.Filter += string.Format(" and [ID] = {0}", textBox2.Text); //добавляем условие для фильтрации по первому полю
 
            // ФИЛЬТРАЦИЯ ПО ID DGRV 2
            ....
 
         }
 
        
       // переход по ссылке
 
        private void button4_Click(object sender, EventArgs e)
        {
            OpenQA.Selenium.Chrome.ChromeOptions co = new OpenQA.Selenium.Chrome.ChromeOptions();
            co.BinaryLocation = @"c:\soft\UD\GoogleChromePortable\1_1\GoogleChromePortable_1.exe";
            co.AddArguments(@"user-data-dir=c:\soft\UD\GoogleChromePortable\1_1\Data\profile");
 
            Browser = new OpenQA.Selenium.Chrome.ChromeDriver(co);
 
 
            Browser.Navigate().GoToUrl([url]http://cyberforum.ru);[/url] // ссылка на сайт                      
 
        }
              
    }
}


Переход на сайт осуществляется этим выражением
Browser.Navigate().GoToUrl("http://cyberforum.ru")

** ВОПРОС
1. Как сделать чтобы в GoToUrl("http://cyberforum.ru") вместо ссылки вставлялось значение из dataGridView 1 из столбца "url1" по двум критериям :
- критерий 1 - textBox2.Text;
- критерий 2 - индекс 13 (который соответствует строке со ссылкой)



PS
Мой уровень владения C# - низкий. Поэтому прошу делать поправку на неточности в терминологии.
Миниатюры
Как перейти по ссылке, которая находится в dataGridView ?  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2016, 23:39
Ответы с готовыми решениями:

Как перейти по ссылке, которая открывается в newWindow, не открывая новое окно IE
Собственно, как перейти по ссылке, которая открывается в newWindow, не открывая новое окно IE?...

Как перенести все данные из DataGridVIew в другую DataGridView, которая находится во второй форме
Как перенести все данные из DataGridVIew в другую DataGridView, которая находится во второй форме?

Как перейти по ссылке ?
Как перейти по ссылке cyberforum.ru при нажатии на кнопку в билдере?

Как программно перейти по ссылке?
Возможно вопрос ламерский, но все же: Как с помошью PHP или Java Script можно программно (например...

13
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
01.11.2016, 12:39 2
zakaz_77, Во первых, лучше сразу приучай себя правильно именовать объекты, в том числе контролы: никаких textBox1, все контролы, к которым идет обращение в коде должны иметь выразительные имена: tbFilePath. Как именно именовать в FAQ хорошо написано.Тогда кстати не нужно писать лишних инструкций.
Во-вторых, нужно работать с самим источником данных (в твоем случае DataTable). dataGridView - это отображение данных, грубо говоря фотография или зеркало, сущность - источник. Работать со значениями dataGridView также неестественно, как чистить зубы не себе, а отражению в зеркале.
Попробуй использовать виртуальный режим. В том же Faq рассказано как + про фильтрацию написано.
1
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
01.11.2016, 12:54  [ТС] 3
Serg34 понял, учту на будущее

Пока нашёл вроде похожий пример по ссылке
https://www.cyberforum.ru/post6025430.html

И попытался на базе его сделать чтобы при нажатии на кнопку ссылка выводилась label9
На свой дилетанский ум набросал код, но что-то не работает.

Не могли бы подсказать в чём проблема?
Или вообще подход не верный?

Кликните здесь для просмотра всего текста
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
         private void button4_Click(object sender, EventArgs e)
        {
 
            /// *** Вывод сообщения в label9 ***
            /// [url]https://www.cyberforum.ru/post6025430.html[/url]
            /// ответ 13
 
            string id = textBox2.Text;
            
            //...
            foreach (DataRow row in table.Rows)
            
            {
                //....
                if (row["ID"].ToString().Equals(id))
                    {
                    if (row["nom"].ToString().Equals(13))
                        {
                            label9.Text = row["url1"].ToString();
                        }
                    }
            }          
 
        }
    }
Миниатюры
Как перейти по ссылке, которая находится в dataGridView ?  
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
01.11.2016, 13:16 4
zakaz_77, А почему не работает? Ошибка?
1
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
01.11.2016, 13:25  [ТС] 5
Никаких ошибок.
Просто нажимаю кнопку button4 и ни какой реакции.

А что? Код правильно написан?

код целиком

Кликните здесь для просмотра всего текста
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
 public partial class Form1 : Form
    {
        BindingSource bs, bs1;
        IWebDriver Browser;
        DataTable table;
        public Form1()
        {
            InitializeComponent();
            
        }
 
        
        private void Form1_Load(object sender, EventArgs e)
        {
            //снятие фильтра
            bs.Filter = " ";
 
            //снятие фильтра
            bs1.Filter = " ";            
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
                        
            string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", textBox1.Text);
            using (OleDbConnection conn = new OleDbConnection(connString))
            {
                
                string commText = "SELECT Код, ID, nom, наименование, кол, url1 FROM tabl1"; //запрос пишите свой!!!
                                // SELECT Код, ID, nom, наименование, кол, url FROM tabl1
                OleDbCommand comm = new OleDbCommand(commText, conn);
 
                /// *** DGRV 1
                bs = new BindingSource();
                table = new DataTable();
                OleDbDataAdapter adapter = new OleDbDataAdapter(comm);
                adapter.Fill(table);
                bs.DataSource = table;
                dataGridView1.DataSource = bs; //если на форме есть DataGridView (типа dataGridView1), выводите туда!
 
 
                // * DGRV 1 ФИЛЬТР по диапазону
                string filter;                
                filter = string.Format(" [nom] >= 11 and [nom] <= 13");//добавляем условие для фильтрации по второму полю
                bs.Filter = filter; //применяем фильтр
 
 
 
                /// *** DGRV 2
                bs1 = new BindingSource();
                DataTable table1 = new DataTable();
                OleDbDataAdapter adapter1 = new OleDbDataAdapter(comm);
                adapter1.Fill(table1);
                bs1.DataSource = table1;
                dataGridView2.DataSource = bs1;
 
                // * DGRV 2 ФИЛЬТР по диапазону
                filter = string.Format(" [nom] >= 31 and [nom] <= 33");//добавляем условие для фильтрации по второму полю
                
                bs1.Filter = filter; //применяем фильтр        
 
            }
        }
 
        // ФИЛЬТРАЦИЯ ПО ID
        private void button2_Click(object sender, EventArgs e)
        {
            // ФИЛЬТРАЦИЯ ПО ID DGRV 1 
            if (textBox2.Text != string.Empty)
                bs.Filter += string.Format(" and [ID] = {0}", textBox2.Text); //добавляем условие для фильтрации по первому полю
 
            // ФИЛЬТРАЦИЯ ПО ID DGRV 2
            if (textBox2.Text != string.Empty)
                bs1.Filter += string.Format(" and [ID] = {0}", textBox2.Text); //добавляем условие для фильтрации по первому полю
 
         }
 
  
 
 
        private void button4_Click(object sender, EventArgs e)
        {
 
            /// *** Вывод сообщения в label9 ***
            /// [url]https://www.cyberforum.ru/post6025430.html[/url]
            /// ответ 13
 
            string id = textBox2.Text;
            
            //проверяем всех людей
            foreach (DataRow row in table.Rows)
            
            {
                //....
                if (row["ID"].ToString().Equals(id))
                    {
                    if (row["nom"].ToString().Equals(13))
                        {
                            label9.Text = row["url1"].ToString();
                        }
                    }
            }           
 
        }
    }
}
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
01.11.2016, 13:47 6
А метод button4_Click подключен к событию Click на кнопке?
Цитата Сообщение от zakaz_77 Посмотреть сообщение
Код правильно написан?
Не хуже, чем в примере
Только нужно выходить из цикла после полезного действия.
C#
1
2
3
4
5
6
7
8
9
10
11
12
foreach (DataRow row in table.Rows)
{
    //....
    if (row["ID"].ToString().Equals(id))
        {
        if (row["nom"].ToString().Equals(13))
            {
                label9.Text = row["url1"].ToString();
                break; //закончили работать - выходим
            }
        }
}
Но, в серьезных приложениях, такой метод будет работать очень долго: поcмотрите сколько приведений в string. В таблице, вроде тоже все в object хранится - а значит будет постоянная распаковка данных. Вобщем, для начала сойдет, но если писать нечто взрослое, то подход не самый лучший.
0
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
01.11.2016, 13:59  [ТС] 7
Не работает...

По прежнему никакой реакции...
Поставил даже для каждого "if" отдельный "break"

Может в свойствах label9 что-нибудь настроить нужно?
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
01.11.2016, 14:21 8
Цитата Сообщение от zakaz_77 Посмотреть сообщение
Поставил даже для каждого "if" отдельный "break"
Это как? Покажи

Добавлено через 5 минут
Цитата Сообщение от zakaz_77 Посмотреть сообщение
Не работает...
Покажи код из Form1.Designer.cs
0
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
01.11.2016, 14:23  [ТС] 9
Вариант 1
Кликните здесь для просмотра всего текста
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
 private void button4_Click(object sender, EventArgs e)
        {
 
            /// *** Вывод сообщения в label9 ***
            /// [url]https://www.cyberforum.ru/post6025430.html[/url]
            /// ответ 13
 
            string id = textBox2.Text;
            
            //проверяем всех людей
            foreach (DataRow row in table.Rows)
            
            {
                //....
                if (row["ID"].ToString().Equals(id))
                    {
                    if (row["nom"].ToString().Equals(13))
                        {
                            label9.Text = row["url1"].ToString();
                            break;
                        }
                            break;
                     }
            }



Вариант 2
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 private void button4_Click(object sender, EventArgs e)
        {
 
            /// *** Вывод сообщения в label9 ***
            /// [url]https://www.cyberforum.ru/post6025430.html[/url]
            /// ответ 13
 
            string id = textBox2.Text;
            
            //проверяем всех людей
            foreach (DataRow row in table.Rows)
            
            {
                //....
                if (row["ID"].ToString().Equals(id))
                    {
                    if (row["nom"].ToString().Equals(13))
                        {
                            label9.Text = row["url1"].ToString();
                            break;
                        }                            
                     }
            }
0
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
01.11.2016, 14:31  [ТС] 10
Прилагаю
1. Проект
2. БД
Вложения
Тип файла: zip 1.ZIP (245.1 Кб, 7 просмотров)
Тип файла: zip Acs-dtgrDB2003..zip (21.2 Кб, 6 просмотров)
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
01.11.2016, 14:31 11
C break тебе видимо пока рановато)))
break осуществляет выход из цикла (for, foreach, while, do while).
Он должен ставиться сразу после полезной работы (нахождение нужного теста), чтобы вхолостую не гонять процессор по всему оставшемуся циклу - ведь зачем?
В первом примере ты его поставил после первой проверки, то есть у тебя произошла проверка первой строки и независимо от результата произошел выход.
Если break непонятен - лучше убери его.

Но причина не совсем в этом. Жду код из дизайнера
1
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
01.11.2016, 14:35 12
zakaz_77,
Вот здесь условие никогда не выполнится:
C#
1
if (row["nom"].ToString().Equals(13))
Ибо сравнивается строка с числом.
И вообще зачем Equals, если можно обычным == сравнивать. И тогда непоняток с типами не будет.
1
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
01.11.2016, 14:47  [ТС] 13
Если не трудно, как это будет выглядеть?
А то пробую и всё ошибки выдаёт...
0
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
01.11.2016, 14:56 14
zakaz_77,
C#
1
if (row["nom"].ToString()==(13).ToString())
или
C#
1
if (int.Parse(row["nom"].ToString())==13)
1
01.11.2016, 14:56
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2016, 14:56
Помогаю со студенческими работами здесь

Как программно перейти по ссылке?
Допустим нужно нажать определённую ссылку из скрипта. Как это сделать? Или это надо на...

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

Как перейти по ссылке ява скрипта.
Подскажите как можно программно перейти по скрипту: &quot;&lt;script type='text/javascript'...

Как перейти по ссылке внутрь таба?
Всем привет! Хотел бы на страницу поставить &quot;аккордеон&quot;, внутри каждой вкладки будет текст с...

Как из ссылки в строке, перейти по этой ссылке?
Пробовал писать в поле сслыку на веб сервис в интернете, но не получилось, затем упростил задачу и...

Как по ссылке перейти на нужную вкладку (tabs)?
Здравствуйте! На одной странице есть ссылки на проекты. На второй странице есть описание проектов...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru