DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C1.Win.C1FlexGridの選択行処理

環境/言語:[WindowsXP、VB.NET]
分類:[.NET]

初めて投稿させて頂きます。
.NET初心者です。説明に不手際があったらお許し下さい。

fxg表というC1.Win.C1FlexGridを作りました。
項目名を表記したFixedが2行あります。
RowIndex2から、2行ずつBackColorをWhiteとOldLaceに設定してあります。
fxg表をクリックした時、
背景色は変えずに、赤の2重線で囲いたいので、
以下のソースを記述しました。
---------------------------------------------------
'FormのLoad時
'表グリッドのプロパティ設定
fxg表.Styles.Add("White")
fxg表.Styles("White").BackColor = Color.White
fxg表.Styles("White").Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Flat
fxg表.Styles("White").Border.Color = Color.LightGray
fxg表.Styles.Add("OldLace")
fxg表.Styles("OldLace").BackColor = Color.OldLace
fxg表.Styles("OldLace").Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Flat
fxg表.Styles("OldLace").Border.Color = Color.LightGray
fxg表.Styles.Add("WhiteSelect")
fxg表.Styles("WhiteSelect").BackColor = Color.White
fxg表.Styles("WhiteSelect").Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Double
fxg表.Styles("WhiteSelect").Border.Color = Color.Red
fxg表.Styles.Add("OldLaceSelect")
fxg表.Styles("OldLaceSelect").BackColor = Color.OldLace
fxg表.Styles("OldLaceSelect").Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Double
fxg表.Styles("OldLaceSelect").Border.Color = Color.Red
----------------------------------------------------
'グリッド選択時
Private Sub fxg表_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles fxg表.Click

Dim i As Integer
For i = 2 To fxg表.Rows.Count - 1 Step 2
fxg表.DrawMode = DrawModeEnum.OwnerDraw
If i = fxg表.Selection.r1 Then
If (i \ 2) = (i / 2) Then
If i \ 4 = i / 4 Then
fxg表.Rows(i).Style = fxg表.Styles("WhiteSelect")
fxg表.Rows(i + 1).Style = fxg表.Styles("WhiteSelect")
Else
fxg表.Rows(i).Style = fxg表.Styles("OldLaceSelect")
fxg表.Rows(i + 1).Style = fxg表.Styles("OldLaceSelect")
End If
Else
If i \ 4 = i / 4 Then
fxg表.Rows(i).Style = fxg表.Styles("WhiteSelect")
fxg表.Rows(i - 1).Style = fxg表.Styles("WhiteSelect")
Else
fxg表.Rows(i).Style = fxg表.Styles("OldLaceSelect")
fxg表.Rows(i - 1).Style = fxg表.Styles("OldLaceSelect")
End If
End If
Else
If (i \ 2) = (i / 2) Then
If i \ 4 = i / 4 Then
fxg表.Rows(i).Style = fxg表.Styles("White")
fxg表.Rows(i + 1).Style = fxg表.Styles("White")
Else
fxg表.Rows(i).Style = fxg表.Styles("OldLace")
fxg表.Rows(i + 1).Style = fxg表.Styles("OldLace")
End If
Else
If i \ 4 = i / 4 Then
fxg表.Rows(i).Style = fxg表.Styles("White")
fxg表.Rows(i - 1).Style = fxg表.Styles("White")
Else
fxg表.Rows(i).Style = fxg表.Styles("OldLace")
fxg表.Rows(i - 1).Style = fxg表.Styles("OldLace")
End If
End If
End If
Next
End Sub
----------------------------------------------------
これだと偶数行選択時は上手くいくのですが
奇数行選択時にはWhiteSelectやOldLaceSelectプロパティが適応されません。
自分では偶数行では、選択行と1行下、奇数行では選択行と1行上と
書いているつもりですが、どうか間違いをご教授下さい。
よろしくお願い致します。
■No17048に返信(Aliceとうさぎさんの記事)
初めましてKEIです。
こちらが参考になるかと♪

http://www.grapecity.com/japan/support/database/P7_342_TechFaq.htm#content

FlexGrid for .NET 3.0J
ID : 8460 DATE : 2006/03/13
Question:
お返事が遅くなり申し訳ありませんでした。

色々と試してみた結果、以下のソースで上手くいきました。
------------------------------------------------------
fxg表.DrawMode = DrawModeEnum.OwnerDraw

If fxg表.Selection.r1 > 1 Then
Dim ix As Integer = (fxg表.Selection.r1 \ 2) * 2
Dim iz As Integer
For iz = 2 To fxg表.Rows.Count - 1 Step 2
If ix = iz Then
If iz \ 4 = iz / 4 Then
fxg表.Rows(iz).Style = fxg表.Styles("WhiteSelect")
fxg表.Rows(iz + 1).Style = fxg表.Styles("WhiteSelect")
Else
fxg表.Rows(iz).Style = fxg表.Styles("OldLaceSelect")
fxg表.Rows(iz + 1).Style = fxg表.Styles("OldLaceSelect")
End If
Else
If iz \ 4 = iz / 4 Then
fxg表.Rows(iz).Style = fxg表.Styles("White")
fxg表.Rows(iz + 1).Style = fxg表.Styles("White")
Else
fxg表.Rows(iz).Style = fxg表.Styles("OldLace")
fxg表.Rows(iz + 1).Style = fxg表.Styles("OldLace")
End If
End If
Next
End If
-------------------------------------------------------------
KEIさん、有難うございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板