powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DataGridViewCheckBoxCell Что делаю неправильно?
19 сообщений из 19, страница 1 из 1
DataGridViewCheckBoxCell Что делаю неправильно?
    #39884172
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть столбец DataGridViewCheckBoxColumn

Добавляю строки в грид.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
		List<DataGridViewRow> rows = new List<DataGridViewRow>();
                foreach (var po in filterOrders)
                {
                    var row = new DataGridViewRow();
                    rows.Add(row);
                    rows[rows.Count - 1].CreateCells(dgvMain
                            , true  // изначально флажки включены
                            , po.SourceDocument.UUID
                            , po.DocumentDate.ToString("dd.MM.yyyy")
                            , po.DocumentNumber
                            , po.PayerName
                            , po.PayerAccount
                            , po.PayerBankName
                            , po.DocumentSum.ToString("# ##0.00")
                            , po.Currency
                            , po.RecipientName
                            , po.RecipientAccount
                            , po.PaymentPurpose
                    );
                }
                dgvMain.Rows.AddRange(rows.ToArray());



При клике на шапке, устанавливаю/снимаю флажки
Код: 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.
private void dgvMain_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            void SetCheckBoxes(bool flag)
            {
                foreach (DataGridViewRow row in dgvMain.Rows)
                {
                    DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells["CB"];
                    //chk.Value = flag ? chk.TrueValue : chk.FalseValue;
                    chk.Value = flag;                    
                }
            }

            // если флажок
            if (e.ColumnIndex == 0)
            {
                // есть ли хотя бы одно выбранное
                int checkedCnt = 0;
                foreach (DataGridViewRow row in dgvMain.Rows)
                {
                    DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells["CB"];
                    if (chk.Value != null && (bool)chk.Value == true)
                    {
                        checkedCnt++;
                    }

                }

                // если ничего не выбрано
                if (checkedCnt == 0)
                {
                    SetCheckBoxes(true);
                }
                else
                {
                    // если выбраны все
                    if (checkedCnt == dgvMain.Rows.Count)
                    {
                        SetCheckBoxes(false);
                    }
                    else
                    {
                        SetCheckBoxes(true);
                    }
                }
            }
        }



И почему то первый не снимается.
Если ткнуть мышкой в любую ячейку таблицы, то снимется.
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39884177
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoviewИ почему то первый не снимаетсяа код SetCheckBoxes собственно нам нужно угадать?
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39884180
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProlisttoviewИ почему то первый не снимаетсяа код SetCheckBoxes собственно нам нужно угадать?

он указан

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
 void SetCheckBoxes(bool flag)
            {
                foreach (DataGridViewRow row in dgvMain.Rows)
                {
                    DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells["CB"];
                    //chk.Value = flag ? chk.TrueValue : chk.FalseValue;
                    chk.Value = flag;                    
                }
            }



изначально так:

Код: c#
1.
2.
   rows[rows.Count - 1].CreateCells(dgvMain
                            , true  // изначально флажки включены
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39884228
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoviewон указанВиноват, не увидел.
Мне кажется, там галочка снимается в цикле снятия всех галок, а потом снова ставится уже как по одиночному клику на ячейку, ближайшую к заголовку столбца...
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39884259
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все события, которые есть на грид
Ладно, буду гуглить
Код: 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.
        private void dgvMain_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            void SetCheckBoxes(bool flag)
            {
                foreach (DataGridViewRow row in dgvMain.Rows)
                {
                    DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells["CB"];
                    //chk.Value = flag ? chk.TrueValue : chk.FalseValue;
                    chk.Value = flag;
                    chk.Selected = flag;
                }
            }

            // если флажок
            if (e.ColumnIndex == 0)
            {
                // есть ли хотя бы одно выбранное
                int checkedCnt = 0;
                foreach (DataGridViewRow row in dgvMain.Rows)
                {
                    DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells["CB"];
                    if (chk.Value != null && Boolean.Parse(chk.Value.ToString()) == true)
                    {
                        checkedCnt++;
                    }

                }

                // если ничего не выбрано
                if (checkedCnt == 0)
                {
                    SetCheckBoxes(true);
                }
                else
                {
                    // если выбраны все
                    if (checkedCnt == dgvMain.Rows.Count)
                    {
                        SetCheckBoxes(false);
                    }
                    else
                    {
                        SetCheckBoxes(true);
                    }
                }
            }

            //dgvMain.Refresh();
            //dgvMain.RefreshEdit();
        }

        private void dgvMain_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            // если шапка
            if (e.RowIndex == -1)
                return;
            // если флажок
            if (e.ColumnIndex == 0)
                return;

            ShowDatailForm();
        }

        private void dgvMain_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                // если есть строки
                if (dgvMain.Rows != null && dgvMain.Rows.Count > 0)
                {
                    ShowDatailForm();
                }
                e.Handled = true;
            }
        }
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39884265
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так флажок-то ставится на строку не твоими событиями, а внутри грида. Проверь, отключи свой обработчик клика по шапке и щелкни по шапке.

Вообще я так, гадаю, просто никто не отвечает, а я с винформами особо не работал
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39884313
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТак флажок-то ставится на строку не твоими событиями, а внутри грида. Проверь, отключи свой обработчик клика по шапке и щелкни по шапке.

Вообще я так, гадаю, просто никто не отвечает, а я с винформами особо не работал
попробовал, не устанавливается
какая то проблема со значением чекбокса

ставлю галку руками, кликаю по шапке, в з-и false вижу под дебагом
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39884399
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел временное решение

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
     private void dgvMain_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            // если не шапка
            if (e.RowIndex > -1 && e.ColumnIndex == 0)
            {
                DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex];

                bool flag = !Boolean.Parse(chk.Value.ToString());

                chk.Value = flag;
                chk.Selected = flag;
                chk.Value = flag ? chk.TrueValue : chk.FalseValue;
            }

        }



и столбец в ReadOnly
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39885250
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не в Winforms дело, а в том что через ячейки грида никто не программирует. Все привязывают его к источнику данных, к DataTable например.
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39885253
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff
Не в Winforms дело, а в том что через ячейки грида никто не программирует. Все привязывают его к источнику данных, к DataTable например.

единственный правильный ответ
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39885261
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation
Worobjoff
Не в Winforms дело, а в том что через ячейки грида никто не программирует. Все привязывают его к источнику данных, к DataTable например.

единственный правильный ответ

методы для создания строк есть, значит ими можно пользоваться
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39885382
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
методы для создания строк есть, значит ими можно пользоваться

Конечно можно. У любой задачи есть несколько способов её решения. Даже майку можно одеть несколькими способами. Но большинство разработчиков, особенно разработчиков инструментальных средств, ориентируются на расслоение архитектуры. Как минимум, это источник данных + GUI. Если идешь не по этому пути - у тебя слишком мало друзей кто может тебе помочь.
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39885413
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
При перемещении по строкам грида после ухода со строки для нее неявно вызывается EndEdit() и перерисовка.

При проходе в цикле по строкам для последней строки это не вызывается
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39886455
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
pation
пропущено...

единственный правильный ответ

методы для создания строк есть, значит ими можно пользоваться

можно, но не вам
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39886790
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation
listtoview
пропущено...

методы для создания строк есть, значит ими можно пользоваться

можно, но не вам

поздно
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39888009
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
pation
пропущено...

можно, но не вам

поздно

тогда страдайте
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39888138
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation
listtoview
пропущено...

поздно

тогда страдайте

починил же
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39888147
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
pation
пропущено...

тогда страдайте

починил же

страдания ещё будут
...
Рейтинг: 0 / 0
DataGridViewCheckBoxCell Что делаю неправильно?
    #39888241
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
listtoview
методы для создания строк есть, значит ими можно пользоваться

Только если грид находится в VirtualMode == true

https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.forms.datagridview.virtualmode?view=netcore-3.0

Обычно данный режим используется для имитации электронных таблиц.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DataGridViewCheckBoxCell Что делаю неправильно?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]