0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 52
1
.NET 4.x

Форматирование ячеек в элементе управления DataGridView

07.02.2019, 21:38. Показов 1632. Ответов 7

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите, как правильно использовать форматирование ячеек, которые формируются при помощи программного кода и без запроса из СУБД. Или каким образом можно создать форматированную ячейку или столбец. Мне необходимо понять, каким образом можно использовать следующий код
VB.NET
1
2
3
4
5
    Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
        Dim DataGridViewCellStyle As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle
        DataGridViewCellStyle.Format = "+7 (999) 000-00-00"
        My.Forms.Application.DataGridView1.Columns(1).DefaultCellStyle = DataGridViewCellStyle
    End Sub
При подпитке использовать данного кода не чего не изменяется в таблице. Ввод данных происходить при помощи следующего кода.

VB.NET
1
2
3
 Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        My.Forms.Application.DataGridView1.CurrentRow.Cells(1).Value = My.Forms.Application.TextBox1.Text
    End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2019, 21:38
Ответы с готовыми решениями:

Создание объединенных строк в элементе управления DataGridView
Необходимо создать таблицу в которой первая объединенная табличная строка «Телефонный справочник» ...

Как в элементе управления CListCtrl поймать нажатие определенной клавиши на элементе?
Поймать нажатие клавиши вообще - несложно: BOOL CSysbackupDlg::OnNotify(WPARAM wParam, LPARAM...

Автоматическое изменение размера элемента управления в пользовательском элементе управления
Добрый день, коллеги! Есть пользовательский элемент управления. В составе есть только TextBox....

Запуск программы в элементе управления
Возможно ли запустить некую программу в окне формы? Вообще суть задачи сделать , так сказать,...

7
1153 / 917 / 153
Регистрация: 25.07.2015
Сообщений: 2,068
08.02.2019, 07:30 2
У DataGridView есть события CellFormatting - наступает при прорисовки ячейки ,там можно "отшаблонить" данные.
Шаблон , если память не изменяет, задаётся тегом # , а не цифрами
В вашем случае что-то типа такого ## (###)###-##-##
Правильность написанного мной шаблона лучше перепроверить
Вообще по datagridView неплохое описание здесь и
1
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 52
08.02.2019, 17:23  [ТС] 3
Вот, что у меня получается, как видно из кода сама таблица работает, а форматирование ячеек нет, это большой вопрос, почему как происходить пока не ясно. Подскажите, кто разбирается в форматировании ячеек.

VB.NET
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
Public Sub Personal_Information_Manager()
        My.Forms.Application.DataGridView2.Columns.Add(0, "№")
        My.Forms.Application.DataGridView2.Columns.Add(1, "Фаминия, Имя, Отчество")
        My.Forms.Application.DataGridView2.Columns.Add(2, "Мобильный телефон")
 
        My.Forms.Application.DataGridView2.Rows.Add("1", "", "")
        My.Forms.Application.DataGridView2.Rows.Add("2", "", "")
        My.Forms.Application.DataGridView2.Rows.Add("3", "", "")
        My.Forms.Application.DataGridView2.Rows.Add("4", "", "")
        My.Forms.Application.DataGridView2.Rows.Add("5", "", "")
        My.Forms.Application.DataGridView2.Rows.Add("6", "", "")
        My.Forms.Application.DataGridView2.Rows.Add("7", "", "")
        My.Forms.Application.DataGridView2.Rows.Add("8", "", "")
 
        My.Forms.Application.DataGridView2.Columns(0).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
        My.Forms.Application.DataGridView2.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
        My.Forms.Application.DataGridView2.Columns(0).SortMode = DataGridViewColumnSortMode.NotSortable
        My.Forms.Application.DataGridView2.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnsMode.AllCells
 
        My.Forms.Application.DataGridView2.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
        My.Forms.Application.DataGridView2.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
        My.Forms.Application.DataGridView2.Columns(1).SortMode = DataGridViewColumnSortMode.NotSortable
        My.Forms.Application.DataGridView2.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnsMode.AllCells
 
        My.Forms.Application.DataGridView2.Columns(2).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
        My.Forms.Application.DataGridView2.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
        My.Forms.Application.DataGridView2.Columns(2).SortMode = DataGridViewColumnSortMode.NotSortable
        My.Forms.Application.DataGridView2.Columns(2).AutoSizeMode = DataGridViewAutoSizeColumnsMode.AllCells
                                    
    End Sub
VB.NET
1
2
3
4
5
    Private Sub DataGridView2_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView2.CellFormatting
        Dim DataGridViewCellStyle As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle
        DataGridViewCellStyle.Format = "## (###)###-##-##"
        My.Forms.Application.DataGridView2.Columns(2).DefaultCellStyle = DataGridViewCellStyle
    End Sub
0
1535 / 1497 / 324
Регистрация: 03.10.2012
Сообщений: 1,534
08.02.2019, 18:07 4
gikch, попробуйте так
VB.NET
1
2
3
Private Sub DataGridView2_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView2.CellFormatting
        e.CellStyle.Format = "## (###)###-##-##"
    End Sub
0
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 52
08.02.2019, 18:30  [ТС] 5
Начение ячейки изменяется, но без форматирования. Почему-то форматирование не срабатывает.
0
259 / 212 / 52
Регистрация: 01.08.2016
Сообщений: 823
08.02.2019, 18:42 6
gikch, Не проще ли сразу номера телефонов вводить через MaskedTextBox?. Сделай шаблон какой тебе надо и все.
0
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 52
08.02.2019, 19:02  [ТС] 7
У меня какая возможность есть в моей программе, но на днях узнал про форматирование ячеек и решил разобраться с этой темой. Если какая есть возможность надо ее изучить и пользоваться научиться.
0
4651 / 3608 / 854
Регистрация: 02.02.2013
Сообщений: 3,487
Записей в блоге: 2
08.02.2019, 20:25 8
Можно так
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DataGridView1.Columns.Add("cID", "ID")
DataGridView1.Columns.Add("cTel", "Tel")
DataGridView1.Columns(1).DefaultCellStyle.Format = "(000) 000-0000"
'…
Private Sub TextBox1_PreviewKeyDown(sender As System.Object, e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles TextBox1.PreviewKeyDown
    If e.KeyCode = Keys.Enter Then
        If TextBox1.Text.Length = 10 Then
            Dim ii As Long = CInt(TextBox1.Text)
            DataGridView1.CurrentRow.Cells(1).Value = ii 
        Else
            DataGridView1.CurrentRow.Cells(1).Value = TextBox1.Text
        End If
    End If
End Sub
*После ввода всех цифр нажимаете клавишу Enter.
Еще вариант добиться поставленной цели это использование не TextBox а MaskedTextBox.
VB.NET
1
2
3
4
5
MaskedTextBox1.Mask = "(000) 000-0000"
'…
Private Sub MaskedTextBox1_PreviewKeyDown(sender As System.Object, e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles MaskedTextBox1.PreviewKeyDown
    If e.KeyCode = Keys.Enter Then DataGridView1.CurrentRow.Cells(1).Value = MaskedTextBox1.Text
End Sub
Также здесь можно предусмотреть обработку ошибок ввода данных при обработке события MaskedTextBox1.Validating (+ErrorProvider).
Можно использовать и TextBox, например
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Private Sub TextBox1_PreviewKeyDown(sender As System.Object, e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles TextBox1.PreviewKeyDown
    If e.KeyCode = Keys.Enter Then
        Dim s As String = TextBox1.Text
        If s.Length = 10 Then
            Dim ii As Long = CInt(s)
            DataGridView1.CurrentRow.Cells(1).Value = ii.ToString("(000) 000-0000")
        Else
            DataGridView1.CurrentRow.Cells(1).Value = s
        End If
    End If
End Sub
3
08.02.2019, 20:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2019, 20:25
Помогаю со студенческими работами здесь

Word: Закладка в элементе управления
Здравствуйте! Столкнулся с проблемой, не могу разобраться как впечатать текст в закладку в элемент...

События в пользовательском элементе управления
Я создал control добавил пару кнопок, потом добавил этот контрол на главную форму. Как прописать...

Масштабирование шрифта в пользовательском элементе управления
Всем здравствуйте; объявление во внутренних переменных контрола Private m_lblDivFont As Font в...

Определение координат курсора на элементе управления
На форме WPF в контейнере Canvas размещены прямоугольник Rectangle и TextBox. Вопрос таков: как при...


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

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

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