powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Nested 2 DataTable в 1 DataGridView
21 сообщений из 21, страница 1 из 1
Nested 2 DataTable в 1 DataGridView
    #38383485
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый

Нужно что то наподобии




2 раза пробывал разобраться в этом вопросе. Можно обойтись и без этой фичи но уж больно хочется понять как это работает.
Вчера убил часов 6-7 а результат ноль.


Создал для пробы пера базу Предметы - Ученики. В ДатаСет установил Nested = True
Перелапатил массу сайтов но решения толком нет.
С ДевЭкспресс связываться не могу и прочими контролами где требуется лицензия.


На просторах Интернета нашел вот такой класс но воспользоваться не получилось


Может кто поделатиться готовым примерчиком или хотя бы наведет на мысль как это реализовать собственными словами.


Заранее спасибо

Код: vbnet
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.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
Imports System.Collections.Generic
Imports System.Linq
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Text
Imports System.Collections
Imports System.Data
Imports System.Diagnostics

Namespace ProductionSupportLibrary


    Public Class NestedDgvColumn
        Inherits DataGridViewColumn
        Public Sub New()
            MyBase.New(New NestedDgvCell())
        End Sub
        Public Overrides Property CellTemplate() As DataGridViewCell
            Get
                Return MyBase.CellTemplate
            End Get
            Set(value As DataGridViewCell)
                If (value IsNot Nothing) AndAlso Not value.[GetType]().IsAssignableFrom(GetType(NestedDgvCell)) Then
                    Throw New InvalidCastException("Must be a NestedDgvCell")
                End If
                MyBase.CellTemplate = value
            End Set
        End Property
    End Class


    Public Class NestedDgvCell
        Inherits DataGridViewCell
        Private dgv As New DataGridView()
        Private Sub SetupDGVToDraw()
            Try
                dgv.BackgroundColor = SystemColors.Control
                dgv.Size = New Size(400, 100)
                dgv.AllowUserToAddRows = False
                dgv.RowHeadersVisible = False
                dgv.ColumnHeadersVisible = False
                dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect
                dgv.BorderStyle = BorderStyle.None
                dgv.AutoGenerateColumns = False
                If TypeOf (Value) Is DataTable Then
                    Dim table As DataTable = DirectCast(Value, DataTable)
                    dgv.Columns.Clear()
                    Dim dgvColumn As DataGridViewTextBoxColumn = Nothing
                    For Each column As DataColumn In table.Columns
                        dgvColumn = New DataGridViewTextBoxColumn()
                        dgvColumn.Name = column.ColumnName
                        dgvColumn.HeaderText = column.ColumnName
                        dgvColumn.DefaultCellStyle.Format = "C2"
                        dgvColumn.ValueType = GetType(Decimal)
                        dgv.Columns.Add(dgvColumn)
                    Next
                    For Each datarow As DataRow In DirectCast(Value, DataTable).Rows
                        dgv.Rows.Add(datarow.ItemArray)
                    Next
                End If

            Catch ex As Exception

            End Try
        End Sub
        Protected Overrides Sub Paint(graphics As Graphics, clipBounds As Rectangle, cellBounds As Rectangle, rowIndex As Integer, cellState As DataGridViewElementStates, value As Object, _
         formattedValue As Object, errorText As String, cellStyle As DataGridViewCellStyle, advancedBorderStyle As DataGridViewAdvancedBorderStyle, paintParts As DataGridViewPaintParts)
            MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, _
             formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts)
            graphics.FillRectangle(New SolidBrush(cellStyle.BackColor), cellBounds)
            SetupDGVToDraw()
            Dim abbreviation As New Bitmap(cellBounds.Width, cellBounds.Height)
            dgv.DrawToBitmap(abbreviation, New Rectangle(0, 0, cellBounds.Width, cellBounds.Height))
            graphics.DrawImage(abbreviation, cellBounds, New Rectangle(0, 0, abbreviation.Width, abbreviation.Height), GraphicsUnit.Pixel)
        End Sub
        Public Overrides Sub InitializeEditingControl(rowIndex As Integer, initialFormattedValue As Object, dataGridViewCellStyle As DataGridViewCellStyle)
            MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)
        End Sub
        Public Overrides ReadOnly Property EditType() As Type
            Get
                Return GetType(DgvEditingControl)
            End Get
        End Property
        Public Overrides Property ValueType() As System.Type
            Get
                Return GetType(Object)
            End Get
            Set(value As System.Type)
            End Set
        End Property
    End Class


    Public Class DgvEditingControl
        Inherits DataGridView
        Implements IDataGridViewEditingControl
        Private dataGridViewControl As DataGridView
        Private valueIsChanged As Boolean = False
        Private rowIndexNum As Integer
        Public Property EditingControlFormattedValue() As Object Implements IDataGridViewEditingControl.EditingControlFormattedValue
            Get
                Return Me.RowCount
            End Get
            Set(value As Object)
            End Set
        End Property
        Public Function GetEditingControlFormattedValue(context As DataGridViewDataErrorContexts) As Object Implements IDataGridViewEditingControl.GetEditingControlFormattedValue
            Return Me.RowCount
        End Function
        Public Sub ApplyCellStyleToEditingControl(dataGridViewCellStyle As DataGridViewCellStyle) Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl
            Me.Font = dataGridViewCellStyle.Font
            Me.ForeColor = dataGridViewCellStyle.ForeColor
            Me.BackgroundColor = dataGridViewCellStyle.BackColor
        End Sub
        Public Property EditingControlRowIndex() As Integer Implements IDataGridViewEditingControl.EditingControlRowIndex
            Get
                Return rowIndexNum
            End Get
            Set(value As Integer)
                rowIndexNum = value
            End Set
        End Property

        Public Function EditingControlWantsInputKey(key As Keys, dataGridViewWantsInputKey As Boolean) As Boolean Implements IDataGridViewEditingControl.EditingControlWantsInputKey
            Select Case key And Keys.KeyCode
                Case Keys.Left, Keys.Up, Keys.Down, Keys.Right, Keys.Enter, Keys.Escape, _
                 Keys.Tab
                    Return True
                Case Else
                    Return False
            End Select
        End Function
        Public Sub PrepareEditingControlForEdit(selectAll As Boolean) Implements IDataGridViewEditingControl.PrepareEditingControlForEdit
        End Sub
        Public ReadOnly Property RepositionEditingControlOnValueChange() As Boolean Implements IDataGridViewEditingControl.RepositionEditingControlOnValueChange
            Get
                Return False
            End Get
        End Property
        Public Property EditingControlDataGridView() As DataGridView Implements IDataGridViewEditingControl.EditingControlDataGridView
            Get
                Return dataGridViewControl
            End Get
            Set(value As DataGridView)
                dataGridViewControl = value
            End Set
        End Property
        Public Property EditingControlValueChanged() As Boolean Implements IDataGridViewEditingControl.EditingControlValueChanged
            Get
                Return valueIsChanged
            End Get
            Set(value As Boolean)
                valueIsChanged = value
            End Set
        End Property
        Public ReadOnly Property EditingControlCursor() As Cursor
            Get
                Return MyBase.Cursor
            End Get
        End Property
        Private ReadOnly Property IDataGridViewEditingControl_EditingPanelCursor() As Cursor Implements IDataGridViewEditingControl.EditingPanelCursor
            Get
                Return EditingControlCursor
            End Get
        End Property
    End Class


End Namespace
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38383556
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G,

аж жалко стало, надо ж 6-7 часов для поведение по умолчанию
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38383557
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38383694
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRos,

Сорри за недопонимание. Но я не пойму как этим воспользоваться?
Это какой то сторонний контрол?
Просто с контролами DevExpress связываться не могу и прочими контролами где требуется лицензия.
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38383696
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да наверное изначально следовало написать. Пишу в WinForm
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38383733
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем GViPRos,
Просто с контролами DevExpress связываться не могу и прочими контролами где требуется лицензия.
ах вот оно что, сорри, не въехал
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38383802
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А насколько сложно сделать это с помощью стандартного контрола?
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38384720
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ плизз если кто реализовывал поделитесь
Ну или идеями как это сделать если б делали это сами
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38384751
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G,

ну DataGrid что ль пользуйся, если а платные нет денег или не хочешь искать бесплатные
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38384817
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем GНарод плизз если кто реализовывал поделитесь
Ну или идеями как это сделать если б делали это самиНа основе стандартного грида фиг ты это сделаешь.

P.S.: Практическое руководство. Отображение главного и подчиненного представлений данных с использованием двух элементов управления DataGridView в Windows Forms .
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38384970
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Артем G
Да забейте вы на это. Очень неудобная штука. Ничего круче 2-х гридов для master-detail еще никто не придумал (см. ссылка от skyANA)
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38385756
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То что по ссылке это не то. То что там это азы.

Сам без хорошей наводки я точно такое не зделаю. Поэтому можно считать что отчаевшись забил.

Может все таки кто то проварачивал такое?

ПО поводу купить дело не в деньгах. А дело в оформлении лицензий и прочего.
Компания крупная. Пока это произойдет 2015 будет отпразнован уже.
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38389761
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем GТо что по ссылке это не то. То что там это азы.

Сам без хорошей наводки я точно такое не зделаю. Поэтому можно считать что отчаевшись забил.

Может все таки кто то проварачивал такое?

ПО поводу купить дело не в деньгах. А дело в оформлении лицензий и прочего.
Компания крупная. Пока это произойдет 2015 будет отпразнован уже.
написали же, что стандартный грид (DataGrid не DataGridView) из первого фреймворка умеет это, его просто скрыли на тулбоксе с 2005 студии но можно вернуть. ну или в коде праям создать контрол,
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38389764
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
удобство вложенного грида конечно сомнительно
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38389800
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasАртем GТо что по ссылке это не то. То что там это азы.

Сам без хорошей наводки я точно такое не зделаю. Поэтому можно считать что отчаевшись забил.

Может все таки кто то проварачивал такое?

ПО поводу купить дело не в деньгах. А дело в оформлении лицензий и прочего.
Компания крупная. Пока это произойдет 2015 будет отпразнован уже.
написали же, что стандартный грид (DataGrid не DataGridView) из первого фреймворка умеет это, его просто скрыли на тулбоксе с 2005 студии но можно вернуть. ну или в коде праям создать контрол,Стандартный грид (DataGrid) не умеет одновременно отображать и master, и details данные.
А именно это нужно автору, судя по скриншоту
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38389956
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,

Да именно это и нужно.

Удивительно что по этой задачке нет в инете вообще практически ни чего. DevExpress, Syncfusion и прочее не в счет.



PS
На днях начну рыться в поисках примеров как добавить звездочки (оценку) в дата грид.
Пальцы держу крестиком надеюсь примеры будет много а описание получше.
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38389998
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G, ну если не устраивает то, что есть, а на платные компоненты денег жалко, то:

C#. Разработка компонентов в MS Visual Studio 2005/2008 +CD
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38390721
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAbarrabasпропущено...

написали же, что стандартный грид (DataGrid не DataGridView) из первого фреймворка умеет это, его просто скрыли на тулбоксе с 2005 студии но можно вернуть. ну или в коде праям создать контрол,Стандартный грид (DataGrid) не умеет одновременно отображать и master, и details данные.
А именно это нужно автору, судя по скриншоту
Да прям, как раз DataGrid из первого фреймворка (не DataGridView, который появился со второго) это умеет.
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38390735
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasskyANAпропущено...
Стандартный грид (DataGrid) не умеет одновременно отображать и master, и details данные.
А именно это нужно автору, судя по скриншоту
Да прям, как раз DataGrid из первого фреймворка (не DataGridView, который появился со второго) это умеет.
а или там ссылка была на дочернюю таблицу, я уж забыл
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38390849
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasbarrabasпропущено...

Да прям, как раз DataGrid из первого фреймворка (не DataGridView, который появился со второго) это умеет.
а или там ссылка была на дочернюю таблицу, я уж забыл Вот именно
...
Рейтинг: 0 / 0
Nested 2 DataTable в 1 DataGridView
    #38572464
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosViPRos,
вот такое и надо, я делал но исходники не найду.
Мне сейчас надо отобразить таблицу материалов и для каждого материала если есть изменения по нему - фактически почти копия оригинала таблицы, типа лога.
Городить второй грид как подчиненый на форме нет смысла к функционалу никак не относится.

если кто-то подскажет ссылкой или кодом буду признателен.
Там кода то не много, но не помню.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Nested 2 DataTable в 1 DataGridView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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