15 / 0 / 2
Регистрация: 27.11.2012
Сообщений: 93
1

Неисправность в повторной отрисовке элемента DataGridView

30.05.2014, 00:49. Показов 550. Ответов 0
Метки нет (Все метки)

Проблема следующая: программа при повторном клике на пункт в меню создает новый объект DataGridView():
Кликните здесь для просмотра всего текста

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
            string[] column_names;
            int ifow = 0;
            TabPage tabp;
//...
             //Создание и заполнение таблицы
                            DGV = new DataGridView();
                            DGV.ScrollBars = ScrollBars.Both;
                            DGV.AllowUserToAddRows = false;
                            DGV.AllowUserToDeleteRows = false;
                            DGV.ColumnHeadersHeightSizeMode =                                                          System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
                            DGV.Dock = System.Windows.Forms.DockStyle.Fill;
                            DGV.Location = new System.Drawing.Point(0, 0);
                            DGV.ReadOnly = true;
                            DGV.RowHeadersVisible = false;
                            DGV.Size = new System.Drawing.Size(665, 528);
                            DGV.TabIndex = 0;
                            column_names = new string[7] { "#", "Длина", "Угол", "Координата X", "Координата Y", "Координата Z", "Направление поверхности" };
                            for (ifow = 0; ifow < column_names.Length; ++ifow)
                                DGV.Columns.Add(new DataGridViewTextBoxColumn());
                            ifow = 0;
                            foreach (DataGridViewTextBoxColumn column in DGV.Columns)
                            {
                                column.HeaderText = column_names[ifow];
                                column.ReadOnly = true;
                                column.SortMode = DataGridViewColumnSortMode.NotSortable;
                                column.Resizable = DataGridViewTriState.False;
                                switch (ifow)
                                {
                                    case 0: { column.Width = 25; } break;
                                    case 1: { column.Width = 60; } break;
                                    case 2: { column.Width = 60; } break;
                                    case 3:
                                    case 4:
                                    case 5:
                                    case 6: { column.Width = 100; } break;
                                }
                                ifow++;
                            }
                            for (int j = 0; j < conicals.Count; ++j)
                            {
                                DGV.Rows.Add();
                                DGV.Rows[DGV.RowCount - 1].Cells[0].Value = ((j + 1).ToString());
 
                                DGV.Rows[DGV.RowCount - 1].Cells[1].Value = conicals[j].Length;
 
                                DGV.Rows[DGV.RowCount - 1].Cells[2].Value = conicals[j].Angle;
 
                                DGV.Rows[DGV.RowCount - 1].Cells[3].Value = conicals[j].X;
 
                                DGV.Rows[DGV.RowCount - 1].Cells[4].Value = conicals[j].Y;
 
                                DGV.Rows[DGV.RowCount - 1].Cells[5].Value = conicals[j].Z;
 
                                DGV.Rows[DGV.RowCount - 1].Cells[6].Value = conicals[j].plane + " " + "{ " + conicals[j].direction + " }";
                            }
                            foreach (DataGridViewRow row in DGV.Rows)
                            {
                                row.Resizable = DataGridViewTriState.False;
                                row.ReadOnly = true;
                            }
                            tabp.Controls.Add(DGV);
                            tabcon.TabPages.Add(tabp);

происходят странности,
Странность №1. При повторных запусках последняя строчка уезжает вниз, вместе со стрелкой скроллера
Первый запуск:
Кликните здесь для просмотра всего текста

Неисправность в повторной отрисовке элемента DataGridView


Повторный запуск:
Кликните здесь для просмотра всего текста

Неисправность в повторной отрисовке элемента DataGridView



Странность №2. При повторном запуске таблицы пропадает горизонтальная полоса прокрутки!
Первый запуск:
Кликните здесь для просмотра всего текста

Неисправность в повторной отрисовке элемента DataGridView


Повторный запуск:
Кликните здесь для просмотра всего текста

Неисправность в повторной отрисовке элемента DataGridView


Перезапуск осуществляю след образом: "пункт меню закрыть файл А"->"пункт меню открыть. файл B."->"пункт меню закрыть файл B"->"пункт меню открыть А". И после этого одна из таблиц для файла А багается.
Код кнопки "Открыть"
Кликните здесь для просмотра всего текста

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
 private void OpenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //Создаем экземпляр класса opendialog
            OpenFileDialog fd = new OpenFileDialog();
            string fileName = "";
            string filedirectory = "";
            //применяем фильтр
            fd.Filter = "3D модель-заготовка(*.stp)|*.stp";
            
            this.label2.Text = "";
           
            //Если пользователь нажал Ок
            if (fd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                fileName = fd.FileName;
                //Будет хранить всю информацию о файле, в том числе и размер в байтах
                FileInfo fileinfo = new FileInfo(fileName);
                openfilestream = null;
                //Присваиваем потоку ссылку на открытый файл
                if ((openfilestream = fd.OpenFile()) != null)
                {
                    //Создаем поток-чтение
                   myread = new StreamReader(openfilestream);
                    //Удалям полный путь из названия файла, хранящееся в fileName 
                    filedirectory = fileName;
                    while (fileName.Contains('\\'))
                    {
                        fileName = fileName.Remove(0, 1);
 
                    }
                    filedirectory = filedirectory.Replace(fileName, "");
                    this.ClientSize = this.MaximumSize;
                    this.label1.Visible = true;
                    this.label2.Text = "Имя: " + fileName + "\nРазмер: " + fileinfo.Length+" байт";
                    this.label2.Text += "\nРасположение: ";
                    this.label3.Text = filedirectory;
                    this.OpenToolStripMenuItem.Enabled = false;
                    //Чета делаем
                    this.ReadingFileToolStripMenuItem.Enabled = true;
                    //this.Memo1.Visible = true;
 
                    //удаляем все лишнее
                   fileName = "";
                    fileinfo = null;
                    this.ClosefileToolStripMenuItem.Enabled = true;
                    tabcon = new TabControl();
                    tabcon.SelectedIndex = 0;
                    tabcon.TabIndex = 5;
                    tabcon.Dock = DockStyle.Fill;
 
                }
                else{MessageBox.Show("Формат файла не верен или файл не существует!","Ошибка открытия файла",MessageBoxButtons.OK,MessageBoxIcon.Warning);}
            }
        }

Код кнопки "Закрыть"
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void ClosefileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.label1.Visible = false;
            this.label2.Text = "";
            this.label3.Text = "";
            this.OpenToolStripMenuItem.Enabled = true;
            this.ClosefileToolStripMenuItem.Enabled = false;
            tabcon.TabPages.Clear();
            tabcon.Dispose();
            //this.Memo1.Text = "";
            //this.Memo1.Visible = false;
            //Закрытие потоков
            myread.Close();
            openfilestream.Close();
        }

Глобальные переменные и классы
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Класс цилиндрических поверхностей
        public class CYLINDRICAL_SURFACE
//Класс фасок
        public class CONICAL_SURFACE
//Класс Торов
        public class TOROIDAL_SURFACE
        public class B_SPLINE_SURFACE_WITH_KNOTS
 
        public Stream openfilestream;
        public StreamReader myread;
        public DataGridView DGV;
        public TabControl tabcon;
 
        public List<CYLINDRICAL_SURFACE> cylindrials;
        public List<CONICAL_SURFACE> conicals;
        public List<TOROIDAL_SURFACE> tors;
        public List<B_SPLINE_SURFACE_WITH_KNOTS> b_splines;

Кто-нить знает способы избавиться от таких багов?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2014, 00:49
Ответы с готовыми решениями:

Какое событие нужно использовать для изменения цвета и т д строк DataGridView при его отрисовке
Подскажите, какое событие нужно использовать для изменения цвета и т д строк DataGridView при его...

Тормозит dataGridView при повторной инициализации
У меня есть dataGridView размера примерно 40x16. Изначально в конструкторе таблица имеет всего...

После повторной вставки элемента в массив он отображается один раз
Приветствую форумчане. Подскажите пожалуйста, как правильно сделать. Вот маленький кусочек кода...

Нужно, чтобы при выборе элемента в одном DataGridView отображались связанные данные в другом DataGridView
Есть две связанные таблицы и соответственно два DataGridView, нужно, чтобы при выборе элемента в...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2014, 00:49

Обновление элемента DataGridView
Имеется форма с элементом DataGridView. В него заносятся данные из массива. По нажатию кнопки в...

Обновление элемента DataGridView
Здравствуйте, коллеги! Разбираюсь с базами. Возник вопрос обновления DataGridView элемента. Я...

Выбор элемента из DataGridView
Доброго времени суток! Пытаюсь выбрать значение XML-файла соответствующие значению в DataGridView....

Сравнение элемента combobox и datagridview
Подскажите пожалуйста, как можно сравнивать элемент combobox со столбцом datagridview и если они...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru