タイトル | : Re^2: VB.net Datagrid タイトルが複数行にわたる表の作成 |
記事No | : 7871 |
投稿日 | : 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
|