|
分類:[VB.NET/VB2005]
いつもお世話になります。
現在、VB2005でWindowsアプリケーションを開発しています。
DataGridViewでデータの表示する際、ひとつのセルに5つのテキストを表示したいのですが、 方法がわからず困っています。
改行で5行表示すれば簡単なのですが、1行だけ条件によって文字色を変更したりする必要があるため、 ReadOnlyのテキストを5つ表示することにより対応しようかと考えています。
-------------------------------------------------------------------------------- Imports System.ComponentModel
Public Class FiveRowCell Inherits DataGridViewTextBoxCell Implements IDataGridViewEditingCell
''' <summary> ''' デフォルト表示件数 ''' </summary> ''' <remarks></remarks> Private Const DefaultDisplayedItems As Integer = 5
''' <summary> ''' 表示最大行数 ''' </summary> ''' <remarks></remarks> Private _maxDisplayedItems As Integer Public Sub New() MyBase.New() Me._maxDisplayedItems = MaxDisplayedItems() End Sub
<DefaultValue(DefaultDisplayedItems)> _ Public Property MaxDisplayedItems() As Integer Get Return Me._maxDisplayedItems End Get Set(ByVal value As Integer) If ((value < 1) _ OrElse (value > 100)) Then Throw New ArgumentOutOfRangeException("MaxDisplayedItems") End If Me._maxDisplayedItems = value If ((Not (Me.DataGridView) Is Nothing) _ AndAlso (Not Me.DataGridView.IsDisposed _ AndAlso Not Me.DataGridView.Disposing)) Then If (Me.RowIndex = -1) Then ' Invalidate and autosize column Me.DataGridView.InvalidateColumn(Me.ColumnIndex) ' TODO: Add code to autosize the cell's column, the rows, the column headers ' and the row headers depending on their autosize settings. ' The DataGridView control does not expose a public method that takes care of this. Else ' The DataGridView control exposes a public method called UpdateCellValue ' that invalidates the cell so that it gets repainted and also triggers all ' the necessary autosizing: the cell's column and/or row, the column headers ' and the row headers are autosized depending on their autosize settings. Me.DataGridView.UpdateCellValue(Me.ColumnIndex, Me.RowIndex) End If End If End Set End Property
Friend WriteOnly Property MaxDisplayedItemsInternal() As Integer Set(ByVal value As Integer) Debug.Assert(((value >= 1) _ AndAlso (value <= 100))) Me.MaxDisplayedItems = value End Set End Property
Public Overrides ReadOnly Property EditType() As Type Get Return Nothing End Get End Property
Public Property EditingCellFormattedValue() As Object Implements System.Windows.Forms.IDataGridViewEditingCell.EditingCellFormattedValue Get
End Get Set(ByVal value As Object)
End Set End Property
''' <summary> ''' クローンメソッドをオーバーライド ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Public Overrides Function Clone() As Object Dim dataGridViewCell As FiveRowCell = CType(MyBase.Clone, FiveRowCell) If (Not (dataGridViewCell) Is Nothing) Then dataGridViewCell.MaxDisplayedItems = Me.MaxDisplayedItems End If Return dataGridViewCell End Function
Public Property EditingCellValueChanged() As Boolean Implements System.Windows.Forms.IDataGridViewEditingCell.EditingCellValueChanged Get
End Get Set(ByVal value As Boolean)
End Set End Property
Public Function GetEditingCellFormattedValue(ByVal context As System.Windows.Forms.DataGridViewDataErrorContexts) As Object Implements System.Windows.Forms.IDataGridViewEditingCell.GetEditingCellFormattedValue
End Function
Public Sub PrepareEditingCellForEdit(ByVal selectAll As Boolean) Implements System.Windows.Forms.IDataGridViewEditingCell.PrepareEditingCellForEdit
End Sub
End Class -------------------------------------------------------------------------------------------------------------
サイトを参考に上記のようなクラスを途中まで作ってみたのですが、 この先どうすればいいかわからなくなってしまいました。 Paintメソッドをオーバーライドする必要があるのはなんとなくわかるのですが、 Paintメソッドでどのような処理をするべきかなどがわかりません。
5つのテキストを表示できるカスタムセルを作成するには、 どのような処理が必要でしょうか?
どうか、ご教授お願い致します。
|