2010年02月22日

ListViewコントロールで各列ヘッダをクリックしてソートさせる

ListViewの列ヘッダをクリックしてソートさせる方法はヘルプにも書かれているが、クリックする度に昇順・降順を切り替える方法が書かれていない。そこでいろいろ調べてようやく見つけた方法を紹介する。

'フォームのカラムクリックイベント
Private Sub ListView1_ColumnClick(ByVal sender As Object, _
ByVal e As System.Windows.Forms.ColumnClickEventArgs) _
Handles ListView1.ColumnClick
Static no(5) As Integer '列のソート状態保持用
If no(e.Column) = 0 Then
'初回または昇順
Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, 0)
no(e.Column) = 1 '次回は降順
Else
'降順
Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, 1)
no(e.Column) = 0 '次回は昇順
End If
End Sub

'ListViewItemComparerクラスをフォームコードに追加
Class ListViewItemComparer
Implements IComparer

Private col As Integer
Private sort As Integer

Public Sub New()
col = 0
sort = 0
End Sub

Public Sub New(ByVal column As Integer, ByVal sortflg As Integer)
'column : 列番号
'sortflg : ソート(0=昇順,1=降順)
'--------------------------------
col = column
sort = sortflg
End Sub

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements IComparer.Compare
If sort = 0 Then
'昇順
Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text, _
CType(y, ListViewItem).SubItems(col).Text)
Else
'降順
Return -[String].Compare(CType(x, ListViewItem).SubItems(col).Text, _
CType(y, ListViewItem).SubItems(col).Text)
End If
End Function
End Class

降順にするには マイナスを付けるだけだったとは知らなかった。
posted by なっちゃん at 16:17| 静岡 ☀| Comment(2) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年02月06日

VB6(VBA)とVB.NET(VB2005,2008)の色データの違い

VB2008でExcelの表を作成するプログラムを作った時、セルの色を指定するところでエラーが起きた。

原因はVB6やVBA(Excel)が色のデータをRGB(赤,緑,青)の3色(3×8)24bitで表現しているのに対し、.NETではARGB(RGBとAlpha(透過)値)の4×8=32bitで表現するようになったためだ。

これらを相互に変換するためにSystem.Drawing.ColorTranslatorクラスにある関数を使う。

・ARGB(Color構造体)をRGBにする
ColorTranslator.ToOle(Color.Red)
ColorTranslator.ToWin32(Color.Red)

・逆にRGBデータをARGB(Color構造体)に変換するには
ColorTranslator.FromOle(RGB(255,255,0))
ColorTranslator.FromWin32(RGB(255,255,0))

・ColorTranslatorにはHTMLで使うカラー形式を変換するメソッドもある
ColorTranslator.ToHtml(Color.Red)
ColorTranslator.FromHtml("#FF00FF")

その後RGBで指定する場合ならColor構造体のメンバーにあるFromArgbメソッドでも可能なことが分かった。
RGBデータでColor(ARGB)指定するには Color.FromArgb(255,255,0)とするだけでよい。この場合アルファ値は暗黙的に 255 (完全不透明) になる。
posted by なっちゃん at 13:33| 静岡 ☀| Comment(0) | TrackBack(0) | VB vs VB.NET | このブログの読者になる | 更新情報をチェックする

2010年02月01日

SQLで日付データを扱う場合

Date型フィールド(例:hogeDate)をDateTimePickerコントロールのValue値で指定する場合

SQLServer:
"hogeDate > CAST('" & DateTimePicker1.Value.ToString & "' AS datetime)
"hogeDate > CONVERT(datetime,'" & DateTimePicker1.Value.ToString & "')"

ACCESS:
"hogeDate > #" & DateTimePicker1.Value.ToString & "#"

Oracle:
"hogeDate > TO_DATE('" & DateTimePicker1.Value.ToString & "','YYYY-MM-DD HH24:MI:SS')"
※Value値を''で囲まないと「ORA-00907: 右カッコがありません」エラーが発生する
※フォーマット文字列を正しく指定しないと「ORA-01861: リテラルが書式文字列と一致しません」エラーが発生する
posted by なっちゃん at 11:31| 静岡 ☁| Comment(0) | TrackBack(0) | ETC | このブログの読者になる | 更新情報をチェックする
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。