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

タイトル Re^2: VB.net Datagrid タイトルが複数行にわたる表の作成
投稿日: 2008/07/28(Mon) 21:10
投稿者やま
お礼が大変遅くなり、申し訳ございませんでした。
魔界の仮面弁士様、大変勉強になりました。
ありがとうございました。


> > 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

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

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