まず、ご協力いただきありがとうございます。
これは Componentone の True DBGrid に関するものなので、回答を期待するのに最適な場所ではないかもしれませんが、現時点ではできる限りのことをしたと感じているので、試してみることにします。
ここ数日、True DBGrid 内でカスタム セルを作成する方法を見つけようとかなりの時間を費やしてきましたが、現在行き詰まっています。私は見つけられる限り多くのドキュメントを調べました。True DBGrid のすべてのチュートリアルを調べましたが、入手できる最も遠いものは下の添付画像に示されています。
ここで、セルをダブルクリックすると、クリックしたセルにカスタム コントロールが表示されます。ただし、セルがクリックされたときだけでなく、常にセルが表示されるようにする必要があります。また、「DisplayColumn.DataColumn.Editor」をリロードする場所で現在行っているように、displayColumn だけでなく、行自体にも基づいてセルを表示したいと考えています。異なるセルがクリックされるたびに。このパフォーマンスのコードを以下に示します。
' 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
画像が示すように、カスタム「DataGridViewTextBoxCell」に配置する以下のリンクのようなDataGridViewのチュートリアルを見ると、これが可能になるはずです。
カスタム DataGridViewCells のチュートリアル
TrueDBGrid に関して私が読んだ内容と、ComponentOne が TrueDBGrid を作成するためのテンプレートとして DataGridView を使用する可能性が最も高いと予想されるロジックに基づいて、カスタム セルを作成する方法は非常に似ていると予想されます。ただし、以下に示すように 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
助けてくれてありがとう