Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/35: Рейтинг темы: голосов - 35, средняя оценка - 4.57
 Аватар для mvs87
15 / 15 / 7
Регистрация: 21.08.2013
Сообщений: 115

Как скрыть определенную ячейку в DataGridView

08.05.2014, 15:01. Показов 7134. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, неполучается догадаться как сделать невидимую ячайку в гриде.

Подскажите пожалуйста.

Вот так создаю грид.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DGV_pac.Rows.Clear();
DGV_pac.Columns.Clear();
this.DGV_pac.Columns.Add("fio", "Фамилия Имя Отчество"); this.DGV_pac.Columns["fio"].Width = 250;
this.DGV_pac.Columns.Add("let", "Возраст"); this.DGV_pac.Columns["let"].Width = 50;
this.DGV_pac.Columns.Add("post_date", "Дата поступления"); this.DGV_pac.Columns["post_date"].Width = 71;
this.DGV_pac.Columns.Add("vipisan", "Статус"); this.DGV_pac.Columns["vipisan"].Width = 80;
 
 
DataGridViewButtonColumn btn_info = new DataGridViewButtonColumn();
DGV_pac.Columns.Add(btn_info); btn_info.HeaderText = "Инфо."; btn_info.Text = "Инфо."; btn_info.Name = "info";
btn_info.UseColumnTextForButtonValue = true; btn_info.Width = 50;
 
DataGridViewButtonColumn btn_vipiska = new DataGridViewButtonColumn();            
DGV_pac.Columns.Add(btn_vipiska); btn_vipiska.HeaderText = "Выписка"; btn_vipiska.Text = "Выписать"; btn_vipiska.Name = "vipiska";
btn_vipiska.UseColumnTextForButtonValue = true; btn_info.Width = 50; btn_vipiska.Width = 80;
 
this.DGV_pac.Sort(this.DGV_pac.Columns[0], ListSortDirection.Ascending);
Вот так гуляю по гриду:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for (int i = 0; i < DGV_pac.RowCount; i++)
{
  if (DGV_pac.Rows[i].Cells["vipisan"].Value.ToString() == "false")
  {
    DGV_pac.Rows[i].Cells["vipiska_date"].Value = null;
    //DGV_pac.Rows[i].Cells["vipiska"].Visible = false; // Так ругается
    //DGV_pac.Columns["vipiska"].Visible = false;// Так невидимый вес столбец
    DGV_pac.Rows[i].Cells["vipisan"].Value = "В стационаре";
    DGV_pac.Rows[i].Cells["vipisan"].Style.BackColor = Color.Yellow;
    }
 
   else if (DGV_pac.Rows[i].Cells["vipisan"].Value.ToString() == "true")
    {
     DGV_pac.Rows[i].Cells["vipisan"].Value = "Выписан";
     DGV_pac.Rows[i].Cells["vipisan"].Style.BackColor = Color.LightGreen;
     }
}
Столбец в котором надо скрывать ячейку типа BUTTON
Как скрыть ячейку_кнопку в определенной строке?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.05.2014, 15:01
Ответы с готовыми решениями:

Как вывести определенную колонку MS SQL в определенную настроенную колонку элемента DataGridView
на языке VB.NET или на худой конец C# Имеется на форме полностью настроенный Грид со всеми параметрами с пятью колонками, имеющими...

Как записать значение в определенную ячейку
Функция в VBA использует значения из различных ячеек на листе, получаю их так s = Worksheets(1).Cells(nom, 4 + i) однако обратного...

Как вытащить определенную ячейку из датагрида
Второй день мучаюсь не могу понять как эту выбранную ячейку вытащить. Есть датагрид в которую грузится бд &lt;DataGrid...

12
Заблокирован
08.05.2014, 15:20
Столбец можно скрыть так

C#
1
DGV_pac.Columns[нужный столбец].Visible = false;
0
 Аватар для mvs87
15 / 15 / 7
Регистрация: 21.08.2013
Сообщений: 115
08.05.2014, 15:30  [ТС]
Спасибо.
Это я в курсе.

Нужно скрыть ячейку.
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
08.05.2014, 15:36
mvs87, как вы это себе представляете? если ячейка невидимая то что на ее месте должно отображаться?
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
08.05.2014, 15:45
Кнопки там как таковой нет, она просто рисуется. Можно, в принципе создать свой шаблон ячейки для колонки и там отрисовку перекрыть:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public class MyDataGridViewButtonCell : DataGridViewButtonCell
    {
        public MyDataGridViewButtonCell() 
            : base() 
        {
 
        }
 
        protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
        {
            if (rowIndex >= 0 && value is bool && !(bool)value)
                paintParts = DataGridViewPaintParts.Background | DataGridViewPaintParts.Border | DataGridViewPaintParts.Focus | DataGridViewPaintParts.SelectionBackground | DataGridViewPaintParts.ErrorIcon;
            base.Paint(graphics, clipBounds, cellBounds, rowIndex, elementState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
        }
    }
До создания строк в DataGridView соответственно делаем так:
C#
1
(dataGridView1.Columns[1] as DataGridViewButtonColumn).CellTemplate = new MyDataGridViewButtonCell();
Добавлено через 1 минуту
Так или иначе - нажатие на ячейку придётся обрабатывать дополнительно. В качестве "сигнала" к тому, что кнопку рисовать не надо я использовал значение false в ячейке.
0
 Аватар для mvs87
15 / 15 / 7
Регистрация: 21.08.2013
Сообщений: 115
26.01.2015, 13:38  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
До создания строк в DataGridView соответственно делаем так:
Так. Вроде понятно.
А как сделать так, чтобы по нажатию на кнопку, она как бы скрывалась?

вот код.

C#
1
2
3
4
5
6
7
8
9
10
11
12
private void DGV_order_manager_CellClick(object sender, EventArgs e)
        {
            // цикл по гриду
            for (int i = 0; i < DGV_order_manager.RowCount; i++)
            {
                // Обрабатываем ячейку
                if (DGV_order_manager.Rows[i].Cells["cancel"].Selected)
                {
                    DGV_order_manager.Rows[i].Cells["cancel"]. // как изменить не на этапе создания а на этапе редактирования?
                }
            }
        }
как изменить не на этапе создания а на этапе редактирования?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
27.01.2015, 09:49
Цитата Сообщение от mvs87 Посмотреть сообщение
А как сделать так, чтобы по нажатию на кнопку, она как бы скрывалась?
Что будет вместо неё? сквозная дырка, родительский котнтрол, фон dgv? Зачем это нужно?
0
 Аватар для mvs87
15 / 15 / 7
Регистрация: 21.08.2013
Сообщений: 115
27.01.2015, 13:58  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
Что будет вместо неё? сквозная дырка, родительский котнтрол, фон dgv? Зачем это нужно?
Вместо неё фон контрола или ДГВ, хоть что кроме кнопки.
Нужно для того чтобы: нажал кнопку "cancel", выполнился код и кнопка пропала. Чтобы второй раз не нажали.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
27.01.2015, 14:38
mvs87, без всяких танцев с бубном
C#
1
2
3
4
5
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1[e.ColumnIndex, e.RowIndex].ReadOnly) return;
            dataGridView1[e.ColumnIndex, e.RowIndex].ReadOnly = true;
        }
Кнопка(ячейка) реагирует только на первое нажатие

Добавлено через 57 секунд
укажи вместо e.ColumnIndex столбец с кнопками, и будет тебе счастье
0
 Аватар для mvs87
15 / 15 / 7
Регистрация: 21.08.2013
Сообщений: 115
28.01.2015, 07:05  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
Кнопка(ячейка) реагирует только на первое нажатие
Не помогает.
DGV_order_manager["cancel", e.RowIndex].ReadOnly Уже = true;
Кнопка реагирует и на второй щелчек.

Лучше бы чтобы кнопка была Enabled = false; но такое не даёт выбрать
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
28.01.2015, 09:23
Цитата Сообщение от mvs87 Посмотреть сообщение
Кнопка реагирует и на второй щелчек.
Я тебе дал код, который работает, я его проверял. Проблема может быть только в том, что ты его неправильно применяешь
0
 Аватар для mvs87
15 / 15 / 7
Регистрация: 21.08.2013
Сообщений: 115
29.01.2015, 09:22  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
Я тебе дал код, который работает, я его проверял. Проблема может быть только в том, что ты его неправильно применяешь
Пардон, я ошибся с этими словами:
Цитата Сообщение от mvs87 Посмотреть сообщение
Кнопка реагирует и на второй щелчек.
Кнопка не скрывается, и нажимается.
А нужно чтобы кнопка была как бы не активной либо вместо неё чтобы был фон грида.

Может я опять код не так применяю?

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
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;
 
namespace test_29_01_2015
{
    public partial class Form1 : Form
    {        
        public Form1()
        {            
            InitializeComponent();
            TB_index.Text = "0";
            dataGridView1.CellContentClick += dataGridView1_CellContentClick;
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.Rows.Add("text1");
            dataGridView1.Rows.Add("text2");
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1["btn", e.RowIndex].ReadOnly) return;
            dataGridView1["btn", e.RowIndex].ReadOnly = true;
            TB_index.Text = Convert.ToString(Convert.ToInt16(TB_index.Text) + 1);
        }
    }
}
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.01.2015, 16:58
Цитата Сообщение от mvs87 Посмотреть сообщение
Кнопка не скрывается, и нажимается.
Свойства Enabled у ячеек нет, Visible тоже. Я предложил простой способ. Единственная недоработка - пользователь не видит, нажималась ли кнопка. Но это легко решается изменением фонового цвета стиля ячейки.
Можно усложнять - переопределить отрисовку, например, или ещё какие-то меры предпринять, вопрос только в целесообразности
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2015, 16:58
Помогаю со студенческими работами здесь

Как закрасить определённую ячейку в StringGrid
Как закрасить определённую ячейку черным цветом и чтобы в нее нельзя было вводить букву. Это для создания кроссворда ))) В тексте ниже...

Как изменить определенную ячейку в таблице
Пользуюсь этим: update mytable set Name='NewValue' Но эта команда меняет значение всех ячеек столбца Name Нашел что можно...

Как скрыть определённую колонку в DataGrid?
Добрый вечер) Решаю такую задачу: Есть коллекция. Заполняю её и отображаю в DataGrid. private void DataGrid_fill() {...

Как отфильтровать список по значению в определенную ячейку
Добрый День! Подскажите есть список полученный ссылками на другие ... Нужно в ячейку ниже записать значение не содержащее символа...

Как заменить по выбранным критериям определенную ячейку?
Здравствуйте. Имеется около 70 страниц в книге. Нужно в каждом листе на каждой строке найти по три значения ячейки и при условии что...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru