Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
62 / 6 / 1
Регистрация: 09.09.2012
Сообщений: 138

Вывод информации в DataGridView и её оформление

16.10.2014, 09:04. Показов 2754. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Описание:
На форме имеется DataGridView, который отображает информацию двух разных DataSource в зависимости от нажатого ToolStripMenuItem_Click. То есть первоначально загружается основной вариант, а потом уже у пользователя есть возможность выбрать отображение другой информации, выбрав соответствующий пункт меню, и при желании снова вернуться к первоначальному виду. Формирование информации в DataGridView происходит через ArrayList.

Вопрос 1
Код, который я привожу ниже - рабочий, но хотелось бы узнать правильно ли я его сформировал для следующих ситуаций - при загрузке формы убирается выделение первой строки, пишется текстовая метка определенного цвета, поскольку при загрузке формы сразу загружается информация в DataGridView (по умолчанию).
Если пользователь решил выбрать через меню отображение другой информации в DataGridView, то DataGridView очищается, отбирается информация в соответствии с DataSource, потом применяются настройки для отображения (выравнивание текста, подпись столбцов и другие), потом снова убирается выделение первой строки, пишется соответствуюшая метка с необходимым цветом. Если пользователь вновь хочет вернуть старую информацию в DataGridView, то ситуация повторяется вновь (см. код ниже). При этом в одном случае применяются настройки Settings1dgv_1(), в другом Settings2dgv_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
25
26
27
28
29
30
31
32
33
34
       public MainForm ()
        {
            InitializeComponent();
            dgv_1.DataSource = dal.Rabota();
            Settings1dgv_1();
            Settings2dgv_1();
        }
 
    private void MainForm_Load(object sender, EventArgs e)
        {
            dgv_1.Rows[0].Selected = false;
            lbl_metka.Text = "РАБОТА";
            lbl_metka.BackColor = Color.Lime;
        }
 
        private void очередьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            dgv_1.DataSource = null;
            dgv_1.DataSource = dal.Ochered();
            Settings2dgv_1();
            dgv_1.Rows[0].Selected = false;
            lbl_metka.Text = "ОЧЕРЕДЬ";
            lbl_metka.BackColor = Color.Yellow;
        }
 
        private void работаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            dgv_1.DataSource = null;
            dgv_1.DataSource = dal.Rabota();
            Settings1dgv_1();
            dgv_1.Rows[0].Selected = false;
            lbl_metka.Text = "РАБОТА";
            lbl_metka.BackColor = Color.Lime;
        }
Вопрос 2
DataGridView подписан на событие RowPostPaint. Как мне реализовать это событие только для момента, когда public MainForm () или private void MainForm_Load
и потом в случае когда пользователь снова выбрал работаToolStripMenuItem_Click?

Вопрос 3
В DataGridView представлена таблица с данными, выравнивание текста в столбце делается с помощью кода

C#
1
dgv_1.Columns["Фамилия"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
тут все хорошо.

Выравнивание текста в заголовке столбца делается с помощью вот этого кода

C#
1
dgv_1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
Но тут неправильно выравниваются некоторые наименования столбцов, они сдвинуты влево почему-то... Что не так делаю?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2014, 09:04
Ответы с готовыми решениями:

Вывод информации в DataGridView в зависимости от выбора в другом DataGridView - C# Access
В 1м DataGridView У меня предприятия, при выборе какого-то 1 предприятия, во 2й DataGridView появляются все записи с тем же ключом. Общий...

Вывод информации в DataGridView в зависимости от выбора в другом DataGridView
Прошу прощения сразу же потому что видел много тем похожих, но ответа так и не могу найти. Есть два датагрида, к первому привязана таблица...

Вывод информации в DataGridView
Задача следующая: Есть бд в MS SQL. База данных для заявок внутри предприятия. Ну типа helpdesk система. Есть таблицы: Requests (сами...

8
62 / 6 / 1
Регистрация: 09.09.2012
Сообщений: 138
17.10.2014, 22:04  [ТС]
ммм... может всё-таки подскажет кто-нибудь?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.10.2014, 08:11
Присваивать DataSource null не обязательно.
В обработчике твоего события поставь условие в зависимости от значения lbl_metka.Text, только устанавливай его раньше свойств DataGridView.
Про заголовки не знаю. Может, там индивидуальные стили назначены и они игнорируют общий?
0
62 / 6 / 1
Регистрация: 09.09.2012
Сообщений: 138
19.10.2014, 18:18  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Присваивать DataSource null не обязательно.
приходится присваивать null, потому что колонки показываются разные, и происходит их некорректное отображение в случае, когда пользователь "скачет" с одной таблицы на другую.
Цитата Сообщение от nmcf Посмотреть сообщение
Может, там индивидуальные стили назначены и они игнорируют общий?
гляну, может и правда со стилями напутал...
Цитата Сообщение от nmcf Посмотреть сообщение
В обработчике твоего события поставь условие в зависимости от значения lbl_metka.Text, только устанавливай его раньше свойств DataGridView.
буду пробовать, но я не совсем понял о чем речь..
0
62 / 6 / 1
Регистрация: 09.09.2012
Сообщений: 138
03.11.2014, 22:02  [ТС]
проблема по-прежнему актуальна.
Хотелось бы получить помощь..
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
04.11.2014, 08:47
1. Я бы перенёс 4-ю строку в MainForm_Load(). Присваивать null имеет смысл только если нужно просто "отвязать" DataGridView от источника, а если назначается новый источник, то старый и так будет замещён.
2. Если ты дорисовываешь что-то, только когда загружен вариант "Работа", в обработчике RowPostPaint поставь условие
C#
1
if (lbl_metka.Text == "РАБОТА")
и только по нему выполняй нужные действия. Но в таком случае изменение Text нужно выполнять до назначения нового DataSource.
1
62 / 6 / 1
Регистрация: 09.09.2012
Сообщений: 138
05.11.2014, 21:39  [ТС]
nmcf,
сделал всё, как написали - помогло. спасибо.
вопрос еще вдогонку - как правильно реализовать момент, когда в DataGridView нечего выводить? Мне необходимо, чтобы просто отображалась пустая таблица и сообщение появлялось. Сообщение я реализовал при отсутствии информации для отображения, но возникает ошибка, поскольку по-прежнему используются настройки Settings2dgv_1() независимо от наличия или отсутствия информации. То есть мне необходимо сделать так, чтобы при отсутствии информации для отображения, появлялось сообщение и пустая таблица. А если информация для отображения есть, то выполняются настройки отображения Settings2dgv_1().

Ну и по-прежнему не могу разобраться с отображением информации в столбце... не выравнивается по центру и всё тут...

Добавлено через 6 часов 36 минут
C#
1
if (dgv_1.DataSource == null)
вот так правильно реализовать ситуацию в случае отсутствия информации для отображения в datagridview, то есть когда при выполнении sql-запроса к базе возвращается 0 строк?
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
05.11.2014, 21:45
Может, правильнее отлавливать нулевое количество строк. DataSource может быть и пустым, но не null. А еще правильнее:
C#
1
if (dgv_1.DataSource == null || dgv_1.Rows.Count == 0)
1
62 / 6 / 1
Регистрация: 09.09.2012
Сообщений: 138
05.11.2014, 21:51  [ТС]
kontuPauk,
вот этот вариант похоже и правда более правильный.
Но готов выслушать и другие мнения =)

Добавлено через 1 минуту
Цитата Сообщение от kontuPauk Посмотреть сообщение
DataSource может быть и пустым, но не null
хотелось бы вот это понять ещё... я всего лишь учусь...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.11.2014, 21:51
Помогаю со студенческими работами здесь

Вывод информации о процессах в datagridview
Добрый день. Получаю список процессов запущенных на компьютере таким образом: private void GetProcess() { ...

Вывод информации из .txt в DataGridView
Добрый день может кто сможет подсказать. Читаю из файла информацию и вывожу это все в datagridview. StreamReader myRead = new...

Вывод определенной информации из dataGridView
Доброго времени. Новичок в изучении языка. Имеется некая БД с работниками. Задача вывести информацию о всех токарях(Turner) из dataGridView...

Вывод структурированной информации из файла в DataGridView
привет1 есть файл name.txt. В нем текст организован: ИМЯ ФАЙЛА#ОБОЗНАЧЕНИЕ#ЛИСТ#НАИМЕНОВАНИЕ#ТИП ДОКУМЕНТА#ЛИТЕРА#ДАТА ЛИТЕРЫ#ФОРМАТ...

Вывод информации о выделенной строке datagridview
У меня есть datagridview, которая подключена к базе. Мне нужно, чтоб когда я выделяю например ячейку, при нажатии на button выводилась вся...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru