tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDataGridViewでセルの境界線が消えない
記事No6569
投稿日: 2007/11/21(Wed) 09:57
投稿者まりん
はじめましてこんにちは。VB初心者ですがよろしくおねがいします。

DataGridViewで下のような表を作成しようとしています。

行を追加したあとCellPaintingイベントで個別のセル境界線を設定しています。
このとき、'1列目のセルが空白だった場合、上側の罫線を消す。というコマンド
e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None
で上側の境界線だけが消えません。(あとは指定とおりできています)
でもTopの部分をRight,Left,Bottomに変えると指定通り境界線は消えます。
また、'1列目のセルすべてで上側の罫線を消す。とした場合、1行目のみ上側境界線は消えますがあとは消えていません。
いろいろ調べましたがどうしても理由が検討つかないのでどなたか教えてください。
よろしくおねがいします。



  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim row0 As String() = {"title1", "", "data1"}
        Dim row1 As String() = {"title2", "", "data2"}
        Dim row2 As String() = {"title3", "", ""}
        Dim row3 As String() = {"", "subtitle1", "data3-1"}
        Dim row4 As String() = {"", "subtitle2", "data3-2"}
        Dim row5 As String() = {"title4", "", "data4"}

        With Me.DataGridView1
            .Rows.Add(row0)
            .Rows.Add(row1)
            .Rows.Add(row2)
            .Rows.Add(row3)
            .Rows.Add(row4)
            .Rows.Add(row5)
        End With

    End Sub

    Sub DataGridView1_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting

        '1列目の右側の罫線は消す
        If e.ColumnIndex = 0 Then
            e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None
        End If

        '1列目のセルが空白だった場合、上側の罫線を消す。1列目の右側の罫線を書く。
        If e.ColumnIndex = 0 And e.Value = "" Then
            e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None’←これが消えない
            e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.Single
        End If

        '3列目のセルが空白だった場合、3列目の右側の罫線を消す
        If e.ColumnIndex = 2 And e.Value = "" Then
            e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None
        End If  

    End Sub

[ツリー表示へ]
タイトルRe: DataGridViewでセルの境界線が消えない
記事No6571
投稿日: 2007/11/21(Wed) 16:06
投稿者y4yama
こんにちは
> DataGridViewで下のような表を作成しようとしています。
>         '1列目のセルが空白だった場合、上側の罫線を消す。1列目の右側の罫線を書く。
>         If e.ColumnIndex = 0 And e.Value = "" Then
>             e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None’←これが消えない
e.AdvancedBorderStyle.Bottom =DataGridViewAdvancedCellBorderStyle.None

>             e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.Single
>         End If

上のように、.Top =と.Bottom = をいれたら、row3とrow4の間の罫線はきえました。OK!
つまり、別の行の.Bottom が出ている・・と思いますが・・・

[ツリー表示へ]
タイトルRe^2: DataGridViewでセルの境界線が消えない
記事No6573
投稿日: 2007/11/22(Thu) 13:33
投稿者まりん
お返事ありがとうございます。

> >         If e.ColumnIndex = 0 And e.Value = "" Then
> >             e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None’←これが消えない
> e.AdvancedBorderStyle.Bottom =DataGridViewAdvancedCellBorderStyle.None
>
> >             e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.Single
> >         End If

これだとたしかにrow3とrow4の間の罫線はきえましたが、row4の下の罫線も消えてしまいます。

> つまり、別の行の.Bottom が出ている・・と思いますが・・・
そう思って探してみたのですが、結局わからないのです・・・。

row3とrow4はrow2に関連されているというのを視覚的に表現したかったので、
発想をかえて一旦表全体の.Bottom を消して、1列目の空白部分以外の上側罫線を書くことでなんとか表現したい形になりました。
でもTopが消えない理由は分からないのでなんだかもやもやしたままです。

[ツリー表示へ]
タイトルRe^3: DataGridViewでセルの境界線が消えない
記事No6574
投稿日: 2007/11/22(Thu) 15:56
投稿者魔界の仮面弁士
> でもTopが消えない理由は分からないのでなんだかもやもやしたままです。

そもそも、普段の状態が「Top なし」「Bottom あり」であるかのように
描画されてしまうので、Top = None にしても、違いが出ないのかも。
http://www.vb-user.net/junk/replySamples/2007.11.22.15.43/GridLine.png

[ツリー表示へ]