タイトル : 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 |