Первое спасибо за вашу помощь.ComponentOne True DBGrid Создание пользовательских ячеек
Это касается 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», как изображения показывают.
Turtorial for Custom DataGridViewCells
Основываясь на том, что я читал о 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
Еще раз спасибо за помощь
Вы считали, что пытаетесь это с помощью FlexGrid. Вначале это может показаться менее интуитивным, но как только вы получите общий смысл, он действительно намного более универсален, чем trueDbGrid. –
Это одна из тех вещей, где у нас уже есть TrueDBGrid, работающий с другими функциями, и мы используем его для каждой таблицы в нашем приложении, поэтому, если бы мы могли избежать этого, я думаю, что это было бы лучше. – Lightbarrier