Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 20.01.2018
Сообщений: 30
1
MS SQL

Не могу очистить DataGridView

06.05.2018, 22:05. Показов 4100. Ответов 23

Author24 — интернет-сервис помощи студентам
Не могу сделать так что-бы при выборе другой таблицы из "Comboboxa" таблица datagridvoew очищалась и на замену появлялась выбранная таблица.DatagridView просто в низ добавляем новую таблицу.
Раньше писал строку
C#
1
dataGridView1.Columns.Clear();
Сейчас она выдаёт ошибку
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
{
           //  dataGridView1.Rows.Clear();//здесь ошибка
            switch (comboBox2.SelectedIndex)
            {
                case 0://425K 
                    {
                        Connect_bd = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=425K");
                        break;
                    }
                case 1://424K
                    {
                        Connect_bd = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=424K");  
                        break;
                    }
                case 2://413Н
                    {
                        Connect_tb = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=413Н");
                        break;
                    }
            }
            switch (comboBox1.SelectedIndex)
            {
                case 0://сентябрь 
                    { 
                        Connect_tb = "SELECT * FROM September_2017 ORDER BY Предметы";
                        break;
                    }
                case 1://октябрь 
                    {
                        Connect_tb = "SELECT * FROM October_2017 ORDER BY Предметы";
                        break;
                    }
                case 2://ноябрь 
                    {  
                        Connect_tb = "SELECT * FROM November_2017 ORDER BY Предметы";
                        break;
                    }
            }
            connetionString = Connect_bd;
            //connetionString = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=425K");
            //connetionString = "Data Source=local;Initial Catalog=425K"; /*;User ID=UserName;Password=Password";*/ 
            connection = new SqlConnection(connetionString);
            Sql = Connect_tb;
            //Sql = "select * from September_2017";
            try
            {
                connection.Open();
                adapter = new SqlDataAdapter(Sql, connection);
                adapter.Fill(ds);
                connection.Close();
                dataGridView1.DataSource = ds.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            Sql = "";
            Connect_bd = "";
            Connect_tb = "";
        }
 
        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            int cmb2;
            cmb2 = comboBox1.Items.Count;
        }
пытался писать
C#
1
2
3
4
for (int i = 1; i<31; i++)
            {
                dataGridView1.Columns.Remove(Convert.ToString(i));
            }
и так
C#
1
2
3
4
 for (int i = 0; i < dataGridView1.Rows.Count; i++)
             {
                 dataGridView1.Rows.RemoveAt(i);
             }
и так
C#
1
dataGridView1.Columns.Clear();
и так
C#
1
DataSet.Clear();
и так далее , я все уже не помню , в некоторых случаях таблица скрывалась , но при повторном выборе таблицы он показывал , то что скрыл.
Миниатюры
Не могу очистить DataGridView   Не могу очистить DataGridView   Не могу очистить DataGridView  

0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2018, 22:05
Ответы с готовыми решениями:

Очистить DataGridView
Очищаю DataGridView predmetDataSet.er.Rows.Clear(); ...

Очистить DataGridView от значений
Всем здравствуйте. Существует ли метод, очищающий все ячейки DataGridWiev от значений? Пока я...

Как очистить dataGridView
Доброго всем времени суток. Помогите разобраться. За раннее извините если такая тема уже...

Как очистить DataGridView
Есть таблица &quot;телефонный справочник&quot; для которой нужно сделать поиск. При нажатии на кнопку я ...

23
C# = ♫♪♫♪♪♫
57 / 56 / 18
Регистрация: 02.08.2014
Сообщений: 283
07.05.2018, 07:07 2
Вам не нужно делать очистку DataGridView т. к. она привязана к источнику данных. Просто
C#
1
dataGridView1.DataSource = null;
0
0 / 0 / 0
Регистрация: 20.01.2018
Сообщений: 30
07.05.2018, 12:09  [ТС] 3
Я это уже пробовал, не работает , вот как это на фото:
Миниатюры
Не могу очистить DataGridView   Не могу очистить DataGridView  
0
3654 / 2567 / 717
Регистрация: 02.08.2011
Сообщений: 6,928
07.05.2018, 13:06 4
ПРОхрамист,
Насколько я помню, DataGridView можно очистить только когда у него нету источника данных.
C#
1
2
3
4
5
6
7
8
9
10
dataGridView1.DataSource = null;
dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
 
.
// дальше повторно устанавливаете источник данных
// с dataGridView1.AutoGenerateColumns = true это будет работать.
// либо руками заново создаете колонки исходя из возвращаемого набора данных
//..
dataGridView1.DataSource = ds.Tables[0];
0
0 / 0 / 0
Регистрация: 20.01.2018
Сообщений: 30
07.05.2018, 13:18  [ТС] 5
Либо я ничего не понимаю , либо руки не из того места растут , добавил то что вы посоветовали и никаких изменений Вот код целиком:
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
 private void button1_Click(object sender, EventArgs e)
        {
            //  dataGridView1.Rows.Clear();
            // dataGridView1.DataSource = null;
            //dataGridView1.Visible = true;
            // dataGridView1.DataSource = null;
            dataGridView1.DataSource = null;//добавил
            dataGridView1.Rows.Clear();//добавил
            dataGridView1.Columns.Clear();//добавил
            switch (comboBox2.SelectedIndex)
            {
                case 0://425K 
                    { 
                        Connect_bd = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=425K");
                        break;
                    }
                case 1://424K
                    {
                        Connect_bd = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=424K");  
                        break;
                    }
                case 2://413Н
                    {
                        Connect_tb = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=413Н");
                        break;
                    }
            }
            switch (comboBox1.SelectedIndex)
            {
                case 0://сентябрь 
                    { 
                        Connect_tb = "SELECT * FROM September_2017 ORDER BY Предметы";
                        break;
                    }
                case 1://октябрь 
                    {
                        Connect_tb = "SELECT * FROM October_2017 ORDER BY Предметы";
                        break;
                    }
                case 2://ноябрь 
                    {  
                        Connect_tb = "SELECT * FROM November_2017 ORDER BY Предметы";
                        break;
                    }
            }
            connetionString = Connect_bd;
            //connetionString = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=425K");
            //connetionString = "Data Source=local;Initial Catalog=425K"; /*;User ID=UserName;Password=Password";*/ 
            connection = new SqlConnection(connetionString);
            Sql = Connect_tb;
            //Sql = "select * from September_2017";
            try
            {
                connection.Open();
                adapter = new SqlDataAdapter(Sql, connection);
                adapter.Fill(ds);
                connection.Close();
                dataGridView1.DataSource = ds.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            Sql = "";
            Connect_bd = "";
            Connect_tb = "";
            dataGridView1.AutoGenerateColumns = true;//добавил
            dataGridView1.DataSource = ds.Tables[0];//добавил
        }
0
3654 / 2567 / 717
Регистрация: 02.08.2011
Сообщений: 6,928
07.05.2018, 13:30 6
Немного подправил ваш *****код:
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
private void button1_Click(object sender, EventArgs e)
        {           
            dataGridView1.DataSource = null;//добавил
            dataGridView1.Rows.Clear();//добавил
            dataGridView1.Columns.Clear();//добавил
            dataGridView1.AutoGenerateColumns = true;
            switch (comboBox2.SelectedIndex)
            {
                case 0://425K 
                    { 
                        Connect_bd = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=425K");
                        break;
                    }
                case 1://424K
                    {
                        Connect_bd = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=424K");  
                        break;
                    }
                case 2://413Н
                    {
                        Connect_tb = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=413Н");
                        break;
                    }
            }
            switch (comboBox1.SelectedIndex)
            {
                case 0://сентябрь 
                    { 
                        Connect_tb = "SELECT * FROM September_2017 ORDER BY Предметы";
                        break;
                    }
                case 1://октябрь 
                    {
                        Connect_tb = "SELECT * FROM October_2017 ORDER BY Предметы";
                        break;
                    }
                case 2://ноябрь 
                    {  
                        Connect_tb = "SELECT * FROM November_2017 ORDER BY Предметы";
                        break;
                    }
            }
            connetionString = Connect_bd;
            //connetionString = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=425K");
            //connetionString = "Data Source=local;Initial Catalog=425K"; /*;User ID=UserName;Password=Password";*/ 
            connection = new SqlConnection(connetionString);
            Sql = Connect_tb;
            //Sql = "select * from September_2017";
            try
            {                
                adapter = new SqlDataAdapter(Sql, connection);
                adapter.Fill(ds);                
                dataGridView1.DataSource = ds.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            Sql = "";
            Connect_bd = "";
            Connect_tb = "";            
        }
При нажатии на кнопку ничего не происходит?
Вообще для начала хотя бы надо вынести этот код в функцию типа FillDataGridView, и вызывать в обработчике события comboBox2.SelectedIndexChanged, и по нажатию кнопки.
Пройдитесь отладчиком до строки dataGridView1.DataSource = ds.Tables[0].
0
0 / 0 / 0
Регистрация: 20.01.2018
Сообщений: 30
07.05.2018, 13:40  [ТС] 7
Да при нажатии на кнопку таблица не убирается
По поводу Comboboxa:

//Месяца
C#
1
2
3
4
5
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int cmb;
            cmb = comboBox1.Items.Count;
        }
//Группы
C#
1
2
3
4
5
 private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            int cmb2;
            cmb2 = comboBox1.Items.Count;
        }
Миниатюры
Не могу очистить DataGridView   Не могу очистить DataGridView   Не могу очистить DataGridView  

0
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
07.05.2018, 13:52 8
Значит в таблице-источнике есть все эти данные. Попробуйте перед заполнением датасета новыми данными, очистить его.
1
3654 / 2567 / 717
Регистрация: 02.08.2011
Сообщений: 6,928
07.05.2018, 14:02 9
Лучший ответ Сообщение было отмечено ПРОхрамист как решение

Решение

Значит дело в DataSet-е, он оставляет данные старой таблицы. В принципе код, изменяющий DataGridView можно убрать, попробуйте просто вот так:
C#
1
ds.Clear();
Добавлено через 8 минут
Либо, скорее всего, как сказал Toros1992, данные дублируются в самой таблице.
1
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
07.05.2018, 14:04 10
IamRain, так мы с вами одно и то же вроде сказали, просто разными словами
1
0 / 0 / 0
Регистрация: 20.01.2018
Сообщений: 30
07.05.2018, 14:04  [ТС] 11
О да Большое спасибо за помощь ))
0
3654 / 2567 / 717
Регистрация: 02.08.2011
Сообщений: 6,928
07.05.2018, 14:16 12
Toros1992, я просто не помню как работает DataSet объект, мб его нужно явно очищать перед вызовом DataAdapter.Fill, а может и не нужно.
Просто не припоминаю у себя подобных ошибок при работе с ADO.NET.

Добавлено через 7 минут
Судя по всему, у ТС-а происходит происходит дублирование из-за разных запросов при повторном заполнении.
When using subsequent Fill calls to refresh the contents of the DataSet, two
conditions must be met:

1.. The SQL statement should match the one initially used to populate the
DataSet
.
2.. The Key column information must be present.
If primary key information is present, any duplicate rows are reconciled and
only appears once in the DataTable that corresponds to the DataSet. Primary
key information may be set either through FillSchema, by specifying the
PrimaryKey property of the DataTable, or by setting the MissingSchemaAction
property to AddWithKey.
Если одно из условий не выполняется, то при повторном заполнении происходит дублирование данных.
В данном случае помогает только DataSet.Clear.
0
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
07.05.2018, 14:24 13
IamRain, Да, я тоже сейчас это прочитал, там скорее всего имеется ввиду работа со строготипизированным датасетом, потому что второй пункт требует еще наличие ограничения первичного ключа на заполняемой таблице, и тут под "обновить" скорее всего подразумевается не "записать совершенно новые данные" а "актуализировать состояние источника данных". Для новых получения новых сведений из БД нужно заполнять новую таблицу в датасете.
0
0 / 0 / 0
Регистрация: 20.01.2018
Сообщений: 30
07.05.2018, 14:25  [ТС] 14
И еще меня интересует один вопрос , он скорее всего чуть не по теме , просто не хочу делать новый тред. Я пилю диплом на Sql server 2014 , когда я допустим скидываю прогу + бд на другой комп , бд он не может прочесть , так как нет Sql servera . Диплом я буду сдавать на диске. Я планирую установить сам сервер на диск , что-бы при защите не было конфуза.Вопрос , при установке сервера на диск , будет ли Прога считывать данные с бд или нет , или нужно будет менять путь бд ?
0
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
07.05.2018, 14:35 15
Он наверное не может получить доступ к БД, потому что при переносе, строка подключения становится невалидной.
Вам же не требуется наличие SQL Server'а при работе с клиентами...
0
3654 / 2567 / 717
Регистрация: 02.08.2011
Сообщений: 6,928
07.05.2018, 14:35 16
Toros1992, afaik строготипизированные DataSet-ы это уже нечто похожее слегка на EF. Здесь речь идет про обычный DataSet.
Цитата Сообщение от ПРОхрамист Посмотреть сообщение
Я планирую установить сам сервер на диск
Эм, на какой диск? Используйте тогда уж SQLite либо устанавливайте SQL Server на машине, на которой собираетесь демонстрировать продукт.
После установки инстанса SQL server-a нужно просто приаттачить вашу базу к нему, изменив строку подключения (AttachDbFilename).

Не по теме:

Обычно Работу с программой можно записать на демо видео и на защите просто показывать на видео основной функционал. Либо тащите ноутбук.

0
0 / 0 / 0
Регистрация: 20.01.2018
Сообщений: 30
07.05.2018, 14:41  [ТС] 17
Если я правильно понял , то нужно изменить эту сроку ?
C#
1
Connect_bd = (@"Data Source=(local)\SQLEXPRESS;Integrated security=SSPI;database=425K");
Просто как я понял Visual обращается к Server'у , а сервер ищет подходящую базу данных .
Я думал сделать там: Устанавливаю сервер на диск , открываю exe сервера который установлен на диск , подключаю нужные бд которые будут находится в папке в программой и все работает.
Просто диска пока , у меня нет проверить эту теорию я не могу, заказал подешевле , диск сегодня как раз заберу.
0
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
07.05.2018, 14:43 18
Как вы себе представляете установленный на диск сервер? можно тогда еще ярлык программы вашей скинуть на диск...

Укажите явно путь к БД

И да, как говорил IamRain, нужно либо сервер на комп препода устанавливать, либо SQLite юзать, либо видео показывать
0
0 / 0 / 0
Регистрация: 20.01.2018
Сообщений: 30
07.05.2018, 14:52  [ТС] 19
Через sql lite не вариант , а то остается мало времени и еще нет столько времени на изучение , я попробую дозвонится до препода и спросить по поводу установки , а если разрешит на своём ноутбуке показать , то тогда вообще будет замечательно)
0
3654 / 2567 / 717
Регистрация: 02.08.2011
Сообщений: 6,928
07.05.2018, 14:53 20
Цитата Сообщение от ПРОхрамист Посмотреть сообщение
Просто как я понял Visual обращается к Server'у , а сервер ищет подходящую базу данных .
Visual Studio никуда не обращается, это ваше приложение обращается к серверу. На машине, на которой будет демонстрация вашей работы, может вообще не быть установлено никакой VS.

Если вы намерены использовать вашу клиент-серверную версию Sql Server-а, то да, можно сделать и так:
1. Желательно установить аналогичную версию Sql Server-a на том ПК, на котором демонстрируете ваш продукт. Если ПК входит в состав какой-либо локалки, то можно поставить и на любой узел в этой локалке.
Можно ставить версию выше, но могут быть траблы с совместимостью, если разница в версиях велика (2016 и 2008, например).
2. Настраиваете подходящим образом строку подключения (Data Source, AttachDbFileName)

А можно вообще использовать SQLite и таскать СУБД вместе с приложением.
0
07.05.2018, 14:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2018, 14:53
Помогаю со студенческими работами здесь

Как очистить ячейку в DataGridView?
как очистить ячейку выбранной строки 3 столбца в datagridview? Добавлено через 13 минут 2. и...

Как очистить таблицу в DataGridView?
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Как очистить строку в DataGridView
Доброго времени суток! У меня возник вопрос с DataGridView. Как очистить строку в DGV, если в ней в...

Как очистить пустые строки в datagridview?
for (int i = 0; i &lt; dataGridView2.RowCount - 1; i++) { if...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru