Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 05.12.2018
Сообщений: 1

Таблица со сложным заголовком

05.12.2018, 13:32. Показов 953. Ответов 6

Студворк — интернет-сервис помощи студентам
мне нужно сделать таблицу(вложение 1) в DataGridView, но я совершенно не понимаю, как мне это сделать, ведь часть её делается двумерной матрицей(либо я что-то не понимаю)
Вот часть моего кода, но он хреново работает, + скрин формы(вложение 2):

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
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        Dim i, j As Integer
 
        Dim dt As New DataTable
 
        N = CInt(InputBox("Введите число опытов N="))
        M = CInt(InputBox("Введите число экспериментов в опыте M="))
        ReDim t(0 To N - 1), k(0 To N - 1), Vpoln(0 To N - 1)
        DataGridView1.DataSource = dt
        dt.Columns.Add(New DataColumn("T", GetType(String)))
        For i = 0 To M - 1
            dt.Columns.Add(New DataColumn("Vx(" + CStr(i) + ")", GetType(String)))
        Next i
        dt.Columns.Add(New DataColumn("Vpoln", GetType(String)))
        For i = 0 To N - 1
            t(i) = CSng(InputBox("t(" + CStr(i) + ")="))
            For j = 0 To M - 1
                k(i) = CSng(InputBox("Vx" + CStr(j) + "="))
            Next j
            Vpoln(i) = CSng(InputBox("Vполн(" + CStr(i) + ")="))
            dt.Rows.Add(New String() {t(i), k(i), Vpoln(i)})
        Next i
    End Sub
Помогитяу
Миниатюры
Таблица со сложным заголовком   Таблица со сложным заголовком  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.12.2018, 13:32
Ответы с готовыми решениями:

Таблица со сложным заголовком!
Привет всем! Очень нужно реализовать таблицу со сложным заголовком, имеються ли уже готовые надежные решения, если нет то можете...

Не заполняется таблица со сложным заголовком
Доброго времени, форумчане. Столкнулся с проблемой. Нашел на просторах гугла пример сложного заголовка таблицы. Подкорректировал под свой...

Таблица с горизонтальной прокруткой и прибитым к верху заголовком
В общем делаю я таблицу на div'ах, все столбцы как в заголовках так и в теле фиксированной ширины. Код примерно следующий: <div...

6
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
05.12.2018, 22:48
Такую таблицу в DGV сделать нельзя.
0
Лень — мое второе и
 Аватар для Orlangur
3228 / 2416 / 687
Регистрация: 28.11.2014
Сообщений: 3,601
Записей в блоге: 3
06.12.2018, 00:09
Возможно, стоит попробовать использовать такой вариант
или же такой вариант с просторов
Кликните здесь для просмотра всего текста
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
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Public Class Form3
    Private daysInMonths() As Integer
    Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim year As Integer = Date.Now.Year
        daysInMonths = New Integer(11) {}
 
        For month As Integer = 1 To 12
            daysInMonths(month - 1) = Date.DaysInMonth(year, month)
 
            Dim day As Integer = 1
            Do While day <= daysInMonths(month - 1)
                Dim [date] As New Date(year, month, day)
                Dim col As New DataGridViewTextBoxColumn() With {
                .Name = [date].ToString(),
                .HeaderText = day.ToString(),
                .Width = 20
            }
 
                Me.DataGridView1.Columns.Add(col)
                day += 1
            Loop
        Next month
 
        For r As Integer = 0 To 3
            Dim row As New DataGridViewRow()
            row.CreateCells(Me.DataGridView1)
            row.HeaderCell.Value = $"Project {r + 1}"
            Me.DataGridView1.Rows.Add(row)
        Next r
 
        Me.DataGridView1.AllowUserToAddRows = False
        Me.DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
        Me.DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
        Me.DataGridView1.ColumnHeadersHeight = Me.DataGridView1.ColumnHeadersHeight * 2
        Me.DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter
 
        AddHandler Me.DataGridView1.Paint, AddressOf DataGridView1_Paint
        AddHandler Me.DataGridView1.Scroll, AddressOf DataGridView1_Scroll
        AddHandler Me.DataGridView1.ColumnWidthChanged, AddressOf DataGridView1_ColumnWidthChanged
        AddHandler Me.DataGridView1.Resize, AddressOf DataGridView1_Resize
 
    End Sub
    Private Sub InvalidateHeader()
        Dim rtHeader As Rectangle = Me.DataGridView1.DisplayRectangle
        rtHeader.Height = Me.DataGridView1.ColumnHeadersHeight / 2
        Me.DataGridView1.Invalidate(rtHeader)
    End Sub
 
    Private Sub DataGridView1_Resize(ByVal sender As Object, ByVal e As EventArgs)
        Me.InvalidateHeader()
    End Sub
 
    Private Sub DataGridView1_ColumnWidthChanged(ByVal sender As Object, ByVal e As DataGridViewColumnEventArgs)
        Me.InvalidateHeader()
    End Sub
 
    Private Sub DataGridView1_Scroll(ByVal sender As Object, ByVal e As ScrollEventArgs)
        Me.InvalidateHeader()
    End Sub
 
    Private Sub DataGridView1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs)
        Dim col As Integer = 0
 
        ' For each month, create the display rectangle for the main title and draw it.
        For Each daysInMonth As Integer In daysInMonths
            Dim r1 As Rectangle = Me.DataGridView1.GetCellDisplayRectangle(col, -1, True)
 
            ' Start the rectangle from the first visible day of the month,
            ' and add the width of the column for each following day.
            For day As Integer = 0 To daysInMonth - 1
                Dim r2 As Rectangle = Me.DataGridView1.GetCellDisplayRectangle(col + day, -1, True)
 
                If r1.Width = 0 Then ' Cell is not displayed.
                    r1 = r2
                Else
                    r1.Width += r2.Width
                End If
            Next day
 
            r1.X += 1
            r1.Y += 1
            r1.Height = r1.Height \ 2 - 2
            r1.Width -= 2
 
            Using back As Brush = New SolidBrush(Me.DataGridView1.ColumnHeadersDefaultCellStyle.BackColor)
                Using fore As Brush = New SolidBrush(Me.DataGridView1.ColumnHeadersDefaultCellStyle.ForeColor)
                    Using p As New Pen(Me.DataGridView1.GridColor)
                        Using format As New StringFormat()
                            Dim month As String = Date.Parse(Me.DataGridView1.Columns(col).Name).ToString("MMMM")
 
                            format.Alignment = StringAlignment.Center
                            format.LineAlignment = StringAlignment.Center
 
                            e.Graphics.FillRectangle(back, r1)
                            e.Graphics.DrawRectangle(p, r1)
                            e.Graphics.DrawString(month, Me.DataGridView1.ColumnHeadersDefaultCellStyle.Font, fore, r1, format)
                        End Using
                    End Using
                End Using
            End Using
 
            col += daysInMonth ' Move to the first column of the next month.
        Next daysInMonth
    End Sub
 
End Class
1
Лень — мое второе и
 Аватар для Orlangur
3228 / 2416 / 687
Регистрация: 28.11.2014
Сообщений: 3,601
Записей в блоге: 3
06.12.2018, 00:10
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
06.12.2018, 12:29
Цитата Сообщение от Orlangur1991 Посмотреть сообщение
стоит попробовать
Можно конечно много чего придумать, но все же следует сказать, что DataGridView совсем не для этого. Разве что только попробовать.
0
Лень — мое второе и
 Аватар для Orlangur
3228 / 2416 / 687
Регистрация: 28.11.2014
Сообщений: 3,601
Записей в блоге: 3
06.12.2018, 18:13
ovva, не спорю, выглядит костыльно)
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
06.12.2018, 20:49
Цитата Сообщение от Orlangur1991 Посмотреть сообщение
выглядит костыльно)
я потому и сказал, что нельзя такое сделать. Можно унаследоваться от dgv, причесать код, но это будет не то. Нужно писать такой контрол с нуля или использовать готовые. В DevExpress, думаю, такие есть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.12.2018, 20:49
Помогаю со студенческими работами здесь

ПодТаблицы с данными(Таблица-Таблица-Таблица-Таблица) и наследованием
Имеется такая база с таблицами Район-МО-Цель-Зачача. Несколько вариантов связей передумал уже, но не понимаю как сделать, чтоб данные не...

Нарисовать ковер со сложным узором
please, помогите &quot;Нарисовать ковер со сложным узором.&quot;

Хранимая процедура со сложным запросом
Есть три таблицы: Необходимо написать хранимую процедуру, возвращающую набор данных с указанием фамилии агента и количества взятых...

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

Выборка пользователей со сложным условием
Задача: Нужно составить запрос так чтобы выводил всех пользователей сайта кроме тех, что есть в друзьях авторизованного пользователя и эво...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
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, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru