C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DataGridViewTextBoxCellに複数テキスト


(過去ログ 26 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■11933 / inTopicNo.1)  DataGridViewTextBoxCellに複数テキスト
  
□投稿者/ ゴメス (3回)-(2007/12/25(Tue) 18:08:35)

分類:[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つのテキストを表示できるカスタムセルを作成するには、
どのような処理が必要でしょうか?


どうか、ご教授お願い致します。



引用返信 編集キー/
■11945 / inTopicNo.2)  Re[1]: DataGridViewTextBoxCellに複数テキスト
□投稿者/ やじゅ (39回)-(2007/12/26(Wed) 00:47:06)
やじゅ さんの Web サイト
No11933 (ゴメス さん) に返信
> いつもお世話になります。
>
> 現在、VB2005でWindowsアプリケーションを開発しています。
>
> DataGridViewでデータの表示する際、ひとつのセルに5つのテキストを表示したいのですが、
> 方法がわからず困っています。
>
> 改行で5行表示すれば簡単なのですが、1行だけ条件によって文字色を変更したりする必要があるため、
> この先どうすればいいかわからなくなってしまいました。
> Paintメソッドをオーバーライドする必要があるのはなんとなくわかるのですが、
> Paintメソッドでどのような処理をするべきかなどがわかりません。
>
> 5つのテキストを表示できるカスタムセルを作成するには、
> どのような処理が必要でしょうか?

下記サイトで、横棒グラフを表示するセルタイプがあります。
テキストもPaintメソッドでカスタム描画しているから理解しやすいかなと。

DataGridViewのカスタム列タイプの作成
http://japan.internet.com/developer/20071211/26.html
引用返信 編集キー/
■12030 / inTopicNo.3)  Re[2]: DataGridViewTextBoxCellに複数テキスト
□投稿者/ ゴメス (4回)-(2007/12/27(Thu) 16:05:45)
やじゅさん、ありがとうございます!!

教えていただいたサイトを参考に作り、どうにか
それらしく動くものができました!!

以前教えていただいたサイトを見かけたのですが、別サイトとあまりにも似ていたため、
内容も同じようなのだろうと思い、ちゃんと見ていませんでした^^;

助かりました。ありがとうございました★



No11945 (やじゅ さん) に返信
> ■No11933 (ゴメス さん) に返信
>>いつもお世話になります。
>>
>>現在、VB2005でWindowsアプリケーションを開発しています。
>>
>>DataGridViewでデータの表示する際、ひとつのセルに5つのテキストを表示したいのですが、
>>方法がわからず困っています。
>>
>>改行で5行表示すれば簡単なのですが、1行だけ条件によって文字色を変更したりする必要があるため、
>>この先どうすればいいかわからなくなってしまいました。
>>Paintメソッドをオーバーライドする必要があるのはなんとなくわかるのですが、
>>Paintメソッドでどのような処理をするべきかなどがわかりません。
>>
>>5つのテキストを表示できるカスタムセルを作成するには、
>>どのような処理が必要でしょうか?
>
> 下記サイトで、横棒グラフを表示するセルタイプがあります。
> テキストもPaintメソッドでカスタム描画しているから理解しやすいかなと。
>
> DataGridViewのカスタム列タイプの作成
> http://japan.internet.com/developer/20071211/26.html
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -