tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: VB.net Datagrid タイトルが複数行にわたる表の作成
投稿日: 2008/07/23(Wed) 21:47
投稿者魔界の仮面弁士
> VS2005のVB.netでwindowsアプリケーションの開発をしています。
> DataGridコントロールの表で、

DataGridView ではなく、
DataGrid を使っておられるのですね?


> 1行目がColA,ColB,ColC、2行目がColD,ColEといった形で
> 表を作成したいのですが、方法がよくわかりません。

「1 行目が 3 列(ColA,ColB,ColC)」あるのに、その下に来る
「2 行目が 2 列(ColD,ColE)」しか無いという事は、もしかして
セルのマージを行いたいという事でしょうか?
┏━┳━┳━┓ だとしたら、残念ながら DataGrid コントロールには
┃A┃B┃C┃ マージはおろか、複数行ヘッダ機能すら用意されていないので
┣━┻┳┻━┫ そうした機能を持ったライブラリを探して購入するか、あるいは
┃ D ┃ E ┃ 類似機能を自作するなどの対応が求められるかと思います。 
┗━━┻━━┛ http://www.geocities.jp/mnow/cs_usercontrol12.html


これが DataGridView であれば、CellPainting イベント等を使って複数行ヘッダを
擬似的に実装する事もできますが…継承していない素の DataGrid の場合は、
あまり高度な表現はできないかと思います。

Imports System.Reflection
Public Class Form1
    Private dg As New DataGrid()
    Private tbl As New DataTable()
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        tbl.Columns.Add("ColA/ColD")
        tbl.Columns.Add("ColB/ColE")
        tbl.Columns.Add("ColC")
        tbl.Rows.Add("A1", "B1", "C1") : tbl.Rows.Add("D1", "E1", "") : tbl.Rows.Add("", "", "")
        tbl.Rows.Add("A2", "B2", "C2") : tbl.Rows.Add("D2", "E2", "") : tbl.Rows.Add("", "", "")
        tbl.Rows.Add("A3", "B3", "C3") : tbl.Rows.Add("D3", "E3", "")
        Controls.Add(dg)
        dg.Dock = DockStyle.Fill
        dg.SetDataBinding(tbl, "")
        SetRowHeight(dg, 2, 2)
        SetRowHeight(dg, 5, 2)
    End Sub

    Public Sub SetRowHeight(ByVal dg As DataGrid, ByVal Row As Integer, ByVal height As Integer)
        Dim p As PropertyInfo = dg.GetType().GetProperty("DataGridRows", BindingFlags.FlattenHierarchy Or BindingFlags.IgnoreCase Or BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.Static)
        Dim r As Object() = p.GetValue(dg, BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.GetProperty Or BindingFlags.Public Or BindingFlags.SuppressChangeType, Nothing, Nothing, Nothing)
        If Row < r.Length Then
            r(Row).Height = height
            dg.Invalidate()
        Else
            Throw New InvalidOperationException()
        End If
    End Sub
End Class

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。