Сначала спасибо за вашу помощь.
Это касается True DBGrid от Componentone, поэтому, возможно, это не лучшее место для ожидания ответов, но на данный момент я чувствую, что сделал все, что мог, поэтому я готов попробовать.
Последние пару дней я потратил довольно много времени, пытаясь понять, как я могу создать пользовательские ячейки в True DBGrid, и в настоящее время я застрял. Я просмотрел столько документации, сколько смог найти, и все руководства по True DBGrid, однако самые дальние, которые я смог получить, показаны на прикрепленном изображении ниже.
Здесь, если вы дважды щелкните ячейку, я могу заставить пользовательский элемент управления появиться в ячейке, на которую они нажали. Однако я хочу, чтобы ячейка была видна все время, а не только при нажатии, и я хочу, чтобы она основывалась на самой строке, а не только на displayColumn, как я делаю сейчас, когда я перезагружаю "DisplayColumn.DataColumn.Editor" каждый раз, когда нажимается другая ячейка. Мой код для этой производительности показан ниже.
' Retrieve Column
Dim objPrefDisplayColumn As C1.Win.C1TrueDBGrid.C1DisplayColumn = Me.TestGrid.Splits(0).DisplayColumns("ColumnFieldName")
'Retrieve data from database
Dim data As DataTable = ' My call to database table goes here Retrieve data that relates to row
' Create Custom Controller and Insert Data from table into it
Dim prvNewCellList As New TestCellList
prvNewCellList.LabelButtonHeight = Me.TestGrid.RowHeight / pref.Rows.Count
prvNewCellList.LabelWidth = (objPrefDisplayColumn.Width * 0.9)
prvNewCellList.ButtonWidth = (objPrefDisplayColumn.Width * 0.1)
prvNewCellList.Action_LoadUI(data)
' Assign Custom Controller to Column
objPrefDisplayColumn.DataColumn.Editor = prvNewCellList
objPrefDisplayColumn.Button = True
objPrefDisplayColumn.ButtonAlways = True
objPrefDisplayColumn.DropDownList = False
objPrefDisplayColumn.DataColumn.DropDown = Nothing
Я знаю, что это должно быть возможно, когда я просматриваю учебные пособия для DataGridView, такие как ссылка ниже, где они помещаются в пользовательскую «DataGridViewTextBoxCell», как показано на изображениях.
Учебное пособие по пользовательским ячейкам DataGridViewCell
Основываясь на том, что я читал о TrueDBGrid, и на ожидаемой логике, что ComponentOne, скорее всего, использовал DataGridView в качестве шаблона для создания TrueDBGrid, я ожидаю, что способ создания пользовательских ячеек будет очень похожим. Однако после попытки воссоздать этот пример с помощью TrueDBGrid, как показано ниже, я обнаружил, что столбцы не принимают «DataGridViewColumn», и когда я попытался изменить это на «C1DataColumn», чтобы оправдать его ожидания, я обнаружил, что класс не имеет ничего похожего на поле « CellTemplate", который можно использовать для создания пользовательских ячеек. На данный момент я почти готов поверить, что функциональность для пользовательских ячеек была забыта во время разработки TrueDBGrid, однако я более чем готов оказаться неправым.
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
Dim col As New DataGridViewRolloverCellColumn()
Me.TestGrid.Columns.Add(col)
Catch ex As Exception
MsgBox("error arrose", vbInformation, "error")
End Try
End Sub
End Class
Public Class DataGridViewRolloverCellColumn
Inherits DataGridViewColumn
Public Sub New()
Me.CellTemplate = New DataGridViewRolloverCell()
End Sub
End Class
Public Class DataGridViewRolloverCell
Inherits DataGridViewTextBoxCell
Protected Overrides Sub Paint( _
ByVal graphics As Graphics, _
ByVal clipBounds As Rectangle, _
ByVal cellBounds As Rectangle, _
ByVal rowIndex As Integer, _
ByVal elementState As DataGridViewElementStates, _
ByVal value As Object, _
ByVal formattedValue As Object, _
ByVal errorText As String, _
ByVal cellStyle As DataGridViewCellStyle, _
ByVal advancedBorderStyle As DataGridViewAdvancedBorderStyle, _
ByVal paintParts As DataGridViewPaintParts)
' Call the base class method to paint the default cell appearance.
MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, elementState, _
value, formattedValue, errorText, cellStyle, _
advancedBorderStyle, paintParts)
' Retrieve the client location of the mouse pointer.
Dim cursorPosition As Point = _
Me.DataGridView.PointToClient(Cursor.Position)
' If the mouse pointer is over the current cell, draw a custom border.
If cellBounds.Contains(cursorPosition) Then
Dim newRect As New Rectangle(cellBounds.X + 1, _
cellBounds.Y + 1, cellBounds.Width - 4, _
cellBounds.Height - 4)
graphics.DrawRectangle(Pens.Red, newRect)
End If
End Sub
End Class
Спасибо еще раз за помощь