次の方法で共有


DataGridViewの2段表示

質問

2006年6月14日水曜日 0:50

イヨモです。

現在、Windowsフォームのアプリケーションを開発しています。

そこで、ユーザインタフェース上、DataGridViewを2段表示する必要があります。

1つのセルに文字を改行して表示する方法も考えましたが、セルにデータをバインドさせたい場合もあるため、

改行表示では不十分です。

出来れば、GrapeCityで販売されているFlexGridコントロールなどがあれば良いのですが、今回は使用しないため、DataGridViewのカスタムコントロールを作成しようと考えています。

下記図のようなDataGridViewは作成可能なのでしょうか。

よろしくお願い致します。

日付

名前

血液型

項目④

項目⑤

項目⑥

項目⑦

項目⑧

項目⑨

項目⑩

2006/6/14

イヨモ

A

・・・

・・・

・・・

・・・

・・・

・・・

・・・

2006/6/14

・・・

・・・

・・・

・・・

・・・

・・・

・・・

・・・

・・・

※緑部分が列ヘッダー。

すべての返信 (24)

2006年10月7日土曜日 3:07 ✅回答済み

データ入力をせず、表示するだけなら、できるんじゃないでしょうか? 基本的には自分で描いてあげることになるでしょう。
.NET1.1のDataGridでは実現したことがあります。DataGridViewはDataGridよりもカスタマイズが楽になっていますので、よりやさしく実現できそうなのですが、試したことはありません。
とりあえずとっかかりとして、以下が参考になりそうな気がします。

方法 : Windows フォームの DataGridView コントロールの行の外観をカスタマイズする 
http://msdn2.microsoft.com/ja-jp/library/85kxk29c.aspx


2006年10月8日日曜日 2:26 ✅回答済み

# 回答じゃまったくないんですが...

数ヶ月すると,
 UI に WPF (Windows Presentation Foundation)
というもの(テクノロジ)が使えるようになります。

その WPF だと,グリッドのような繰り返し描画は,ListView というもので表現するんですが,
その行は,ListViewItem という形で持つようになり,
ListViewItem は,WPF 内で,ContentControl と呼ばれているもので,
そのListViewItem には,要素を ひとつ 持つことができます。
ふつうは,ViewBase から派生したものが指定されることを想定しているようです。

MS からは,ViewBase というものから派生した GridView というものが用意されていて,
それを ListViewItem に指定すると,今の DataGridView のようになるわけです。
見た目は一緒なんですが,仕組み的にはまったく変わります。

実際には,試していないので保障はできないんですが,
WPF では,各行の内容 表現/描画 は,簡単にやれるんじゃないかと思います。

というのは,
WPF では,ContentControl 系のものには,
その中に別のコントロールを入れ子にしていけます。
で,
Canvas という名前のコントロールも ContentControl なんですが,
Canvas という名前から連想できるように,
その中に入れ子で別のコントロールを複数入れることができます。
それも好きな位置に表示させれます。

現在は,拡張しようとすると,自力で描画しないといけません。
でも,WPF だと,相当簡単に 宣言的にやれるようになりそうなので,
WPF の研究をした方が近道のような気がします。たぶん。

また,データバインディング自体は,ListView 側で行われるので,
その各行の中身の描写は,ViewBase から派生したクラスで利用する
DataTemplate オブジェクトを利用するだけです。
XAMLフォーマット と呼ばれているもので,
描画位置やバインディング等を指定するだけです。
その指定に従って,繰り返し表示をやってくれます。

イメージとしては,

How to: Create a Custom View Mode for a ListView

<DataTemplate x:Key="centralTile">
  <StackPanel Height="100" Width="90">
    <Grid Width="70" Height="70" HorizontalAlignment="Center">
      <Image Source="{Binding XPath=@Image}" Margin="6,6,6,9"/>
    </Grid>
    <TextBlock Text="{Binding XPath=@Name}" FontSize="13"
               HorizontalAlignment="Center" Margin="0,0,0,1" />
    <TextBlock Text="{Binding XPath=@Type}" FontSize="9"
               HorizontalAlignment="Center" Margin="0,0,0,1" />
  </StackPanel>
</DataTemplate>

の箇所です。ここでは,Canvas でなく StackPanel を使っています。
行のイメージが浮かぶと思います。
こんな風に宣言的にやるだけで,描画位置を調整できるので楽だと思います。

 

# Vista で実現されようとしているものですが,
# もちろん,WinXP 上でも使えるテクノロジです。


2006年11月3日金曜日 3:16 ✅回答済み

一部 バグが有りましたので 改良しました

Imports System.Windows.Forms
Imports System.Drawing
Public Class ExDataGridView
    Inherits DataGridView

    Public Sub New()
        MyBase.new()
    End Sub
    Public pBorderColor As Color = SystemColors.ControlDark
    <System.ComponentModel.Category("カスタム")> _
    <System.ComponentModel.Description("境界線のカラー")> _
    Public Property BorderColor() As Color
        Get
            Return pBorderColor
        End Get
        Set(ByVal value As Color)
            pBorderColor = value
        End Set
    End Property

    Public pDokCell As New Generic.List(Of Integer)
    <System.ComponentModel.Category("カスタム")> _
    <System.ComponentModel.Description("結合するヘッダーを設定する値 設定する値は1列目から2列分、4列目から3列分結合であれば 2,0,0,3というふうに設定  Generic.List型 ")> _
    Public Property ドッキングセル() As Generic.List(Of Integer)
        Get
            Return pDokCell
        End Get
        Set(ByVal value As Generic.List(Of Integer))
            pDokCell = value
        End Set
    End Property

    Public pHedTXT() As String
    <System.ComponentModel.Category("カスタム")> _
    <System.ComponentModel.Description("上部ヘッダーテキストです 1列目から2列分結合した部分のテキストを""A""4列目から3列分結合させた部分のテキストを""B""とする場合 A、空白、空白、B というふうに設定" & _
                                      " 空白に設定している列は元のヘッダーテキストが表示される")> _
    Public Property FullHedTxt() As String()
        Get
            Return pHedTXT
        End Get
        Set(ByVal value As String())
            pHedTXT = value
        End Set
    End Property

    Private Sub Me_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles Me.CellPainting
        ヘッダー結合(e, pDokCell)
    End Sub

    Public Function HedTxtSet() As ArrayList

        Dim arry As New ArrayList
        Dim cel As New ArrayList
        Dim col As Integer = Me.ColumnCount - 1
        For i As Integer = 0 To col
            arry(i) = Me.Columns(i).HeaderText
        Next
        For Each d As Integer In ドッキングセル
            For ii As Integer = d To d + ドッキングセル(d) - 1
                arry(d) = FullHedTxt(d)
            Next
        Next
        Return arry
    End Function

    Public Event HedPaint()

    Private Sub aaExDataGridView_v6_HedPaint() Handles Me.HedPaint

        Dim dok As Integer = 0
        For Each d As Integer In ドッキングセル
            If d > 1 Then
                dok = 1
            End If
        Next
        If dok = 1 Then
            Me.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
            Me.ColumnHeadersHeight = 34
        End If
    End Sub

    Private Sub ヘッダー結合(ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs, _
            ByVal Dokcell As Generic.List(Of Integer))

        RaiseEvent HedPaint()

        If Dokcell Is Nothing Then Exit Sub

        If e.ColumnIndex >= 0 AndAlso e.RowIndex = -1 Then
            Dim cWid As New Hashtable
            Dim ww As Integer
            For iii As Integer = 0 To CInt(Dokcell.Count) - 1
                ww = 0
                If Dokcell(iii) <> Nothing Then

                    For id As Integer = iii To iii + Dokcell(iii) - 1
                        ww = ww + Me.Columns(id).Width
                    Next
                    cWid(iii + Dokcell(iii) - 1) = ww
                End If
            Next

            Dim txt As String = CStr(e.Value)
            Dim DokSetMain As New ArrayList
            Dim DokSub As New ArrayList
            Dim DokTxt As New Hashtable
            Dim HedTX As New Hashtable

            Dim cc As Integer
            For Each d As Integer In Dokcell
                If d > 1 Then
                    Dim int As Integer = cc + d - 1
                    DokSetMain.Add(int)
                    DokTxt(int) = Me.Columns(cc).HeaderCell.Value
                    Dim max As Integer
                    If Not FullHedTxt Is Nothing Then
                        max = FullHedTxt.Length
                    End If

                    If cc < max Then
                        HedTX(int) = FullHedTxt(cc)
                    End If

                    If d > 1 Then
                        For i As Integer = cc To cc + d - 1
                            DokSub.Add(i)
                        Next
                    End If
                End If
                cc += 1
            Next
            Dim col As Integer = e.ColumnIndex
            Dim x2 As Integer = e.CellBounds.X
            Dim Y2 As Integer = e.CellBounds.Y
            Dim hei As Integer = CInt(e.CellBounds.Height / 2)
            Dim wid As Integer = e.CellBounds.Width

            Dim backBrush As New SolidBrush(e.CellStyle.BackColor)
            Dim newRect As New Rectangle(e.CellBounds.X, e.CellBounds.Y, _
                e.CellBounds.Width - 1, e.CellBounds.Height - 1)
            Dim backColorBrush As New SolidBrush(e.CellStyle.BackColor)
            Dim gridBrush As New SolidBrush(Me.GridColor)
            Dim gridLinePen As New Pen(gridBrush)
            Dim BoPen As New Pen(BorderColor)

            Dim Bou1 As New Rectangle( _
                                        x2 - 1, _
                                        Y2 + hei, _
                                        wid, _
                                        hei - 1)
            Try
                'ドッキングセル上段
                If DokSetMain.Contains(col) = True Then

                    e.Graphics.FillRectangle(backBrush, e.CellBounds)

                    Dim Bou2 As New Rectangle(x2 - 1, _
                                              Y2 + hei - 1, _
                                              wid, _
                                              hei)
                    With e.Graphics
                        .DrawString(CStr(e.Value), e.CellStyle.Font, Brushes.Black, _
                                                    x2 + 2, Y2 + hei + 2, _
                                                    StringFormat.GenericDefault)
                        .DrawLine(Pens.White, x2, Y2 + hei, x2, Y2 + hei + hei - 1)
                        .DrawLine(Pens.White, x2, Y2 + hei, x2 + wid - 1, Y2 + hei)

                    End With

                    txt = HedTX(col)
                    If txt Is Nothing OrElse txt = "" Then
                        txt = CStr(DokTxt(col))
                    End If

                    Dim wid2 As Integer = CInt(cWid(col))
                    x2 = x2 - (wid2 - wid)

                    Bou1 = New Rectangle(x2 - 1, _
                                         Y2, _
                                         wid2, _
                                         hei - 1)
                    With e.Graphics
                        .DrawRectangle(BoPen, Bou1)
                        .DrawRectangle(BoPen, Bou2)
                        .DrawString(txt, e.CellStyle.Font, Brushes.Black, _
                                                               x2 + 2, Y2 + 2, _
                                                               StringFormat.GenericDefault)
                        .DrawLine(Pens.White, x2, Y2 + 1, x2, Y2 + hei - 1)
                        .DrawLine(Pens.White, x2, Y2 + 1, x2 + wid2 - 1, Y2 + 1)
                    End With
                    e.Handled = True
                Else
                    'ドッキングセル以外
                    If DokSub.Contains(col) = False Then
                        e.Graphics.FillRectangle(backBrush, e.CellBounds)
                        Bou1 = New Rectangle(x2 - 1, _
                                             Y2, _
                                             wid, _
                                             hei * 2 - 1)
                        e.Graphics.DrawRectangle(BoPen, Bou1)
                        Dim max As Integer = 0
                        If Not FullHedTxt Is Nothing Then
                            max = FullHedTxt.Length
                        End If
                        Dim txt3 As String = Nothing
                        If col < max Then
                            txt3 = FullHedTxt(col)
                        End If
                        If Not txt3 Is Nothing AndAlso txt3 <> "" Then
                            txt = txt3
                        Else
                            txt = CStr(e.Value)
                        End If
                        With e.Graphics
                            .DrawString(txt, e.CellStyle.Font, Brushes.Black, _
                                                            x2 + 2, Y2 + 2, _
                                                            StringFormat.GenericDefault)
                            .DrawLine(Pens.White, x2, Y2 + 1, x2, Y2 + hei * 2 - 1)
                            .DrawLine(Pens.White, x2, Y2 + 1, x2 + wid - 1, Y2 + 1)
                        End With
                        e.Handled = True
                    Else
                        'ドッキングセル下段
                        Bou1 = New Rectangle(x2 - 1, _
                                             Y2 + hei - 1, _
                                             wid, _
                                             hei)
                        With e.Graphics
                            .FillRectangle(backBrush, e.CellBounds)
                            .DrawRectangle(BoPen, Bou1)
                            .DrawString(CStr(e.Value), e.CellStyle.Font, Brushes.Black, _
                                                 x2 + 2, Y2 + hei + 2, _
                                                 StringFormat.GenericDefault)
                            .DrawLine(Pens.White, x2, Y2 + hei, x2, Y2 + hei * 2)
                            .DrawLine(Pens.White, x2, Y2 + hei, x2 + wid - 1, Y2 + hei)
                        End With
                        e.Handled = True
                    End If
                End If
            Finally

                BoPen.Dispose()
                backColorBrush.Dispose()
                gridLinePen.Dispose()
                gridBrush.Dispose()
                backBrush.Dispose()

            End Try
        End If

    End Sub

End Class


2007年4月2日月曜日 17:58 ✅回答済み

かずbooさんのソースを参考に、C#で作成してみました。

 

using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace DataGridViewEx
{
    public partial class DataGridViewEx : DataGridView
    {
        //コンストラクタ
        public DataGridViewEx()
        {
            //セル描画イベントハンドラの追加
            this.CellPainting += new DataGridViewCellPaintingEventHandler(DataGridViewEx_CellPainting);
        }

        //ドッキングセルを表す内部クラス

        //第0カラムから2カラム分結合し、上段テキストを"A1"とする場合、

        //new DataGridViewEx.DockingCell(0, 2, "A1")のようにインスタンスを作成
        public class DockingCell
        {
            //開始セル
            private int start;
            public int Start
            {
                get
                {
                    return start;
                }
                set
                {
                    start = value;
                }
            }

            //セル数
            private int count;
            public int Count
            {
                get
                {
                    return count;
                }
                set
                {
                    count = value;
                }
            }

            //ヘッダテキスト
            private string text;
            public string Text
            {
                get
                {
                    return text;
                }
                set
                {
                    text = value;
                }
            }

            //コンストラクタ
            public DockingCell(int start, int count, string text)
            {
                this.start = start;
                this.count = count;
                this.text = text;
            }
        }

        //ドッキングセルのリスト

        //作成したDockingCell型オブジェクトをAdd()メソッドで追加する

        //DockingCellList.Add(new DataGridViewEx.DockingCell(0, 2, "A1"))といった具合

      private List<DockingCell> dockingCellList = new List<DockingCell>();
        public List<DockingCell> DockingCellList
        {
            get
            {
                return dockingCellList;
            }
            set
            {
                dockingCellList = value;
            }
        }

        //セル描画イベントハンドラ
        private void DataGridViewEx_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            //このメソッドでは、ヘッダの描画のみを行う
            if (e.ColumnIndex >= 0 && e.RowIndex == -1)
            {
                //そのヘッダがどのドッキングセルに属しているか調べる
                int index = -1;
                for (int i = 0; i < DockingCellList.Count; i++)
                {
                    if (e.ColumnIndex >= DockingCellList.Start && e.ColumnIndex < DockingCellList.Start + DockingCellList.Count)
                    {
                        index = i;
                        break;
                    }
                }

                //とりあえず塗りつぶす
                e.Graphics.FillRectangle(new SolidBrush(e.CellStyle.BackColor), e.CellBounds);

                //ドッキングしている場合
                if (index >= 0)
                {
                    //上段
                    int x = e.CellBounds.X;
                    for (int i = e.ColumnIndex - 1; i >= DockingCellList[index].Start; i--)
                    {
                        x -= this.Columns.Width;
                    }
                    int width = 0;
                    for (int i = DockingCellList[index].Start; i < DockingCellList[index].Start + DockingCellList[index].Count; i++)
                    {
                        width += this.Columns.Width;
                    }
                    Rectangle rect1 = new Rectangle(x, e.CellBounds.Y, width, e.CellBounds.Height / 2);
                    DrawCell(e.Graphics, rect1);
                    e.Graphics.DrawString(DockingCellList[index].Text, e.CellStyle.Font, Brushes.Black, rect1.X + 2, rect1.Y + 2);

                    //下段
                    Rectangle rect2 = new Rectangle(e.CellBounds.X, e.CellBounds.Y + e.CellBounds.Height / 2, e.CellBounds.Width, e.CellBounds.Height / 2);
                    DrawCell(e.Graphics, rect2);
                    e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font, Brushes.Black, rect2.X + 2, rect2.Y + 2);
                }

                //ドッキングしていない場合
                else
                {
                    DrawCell(e.Graphics, e.CellBounds);
                    e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font, Brushes.Black, e.CellBounds.X + 2, e.CellBounds.Y + 2);
                }

                //ハンドルされたことを報告
                e.Handled = true;
            }
        }

        //セルの描画に用いるメソッド
        private void DrawCell(Graphics g, Rectangle rect)
        {
            g.DrawLine(new Pen(SystemColors.ControlDark), rect.Left - 1, rect.Top, rect.Right - 2, rect.Top);
            g.DrawLine(new Pen(SystemColors.ControlDark), rect.Left - 1, rect.Top, rect.Left - 1, rect.Bottom - 1);
            g.DrawLine(Pens.White, rect.Left, rect.Top + 1, rect.Right - 2, rect.Top + 1);
            g.DrawLine(Pens.White, rect.Left, rect.Top + 1, rect.Left, rect.Bottom - 1);
        }
    }
}


2008年10月2日木曜日 13:21 ✅回答済み

 窓際族 さんからの引用

datagridview1をexDataGridVIewに変身させることはできませんですよね。

 

C#でしょうか? C#であればInitializeComponent();という記述がコンストラクタにありますから、そこで右クリックして「定義へ移動」をクリックします。そうするとInitializeComponent()の中に

this.dataGridView1 = new System.Windows.Forms.DataGridView();

という記述が見つかりますから、

this.dataGridView1 = new exDataGridVIew();

とすればdatagridview1がexDataGridVIewに変身します。exDataGridVIewクラスはInitializeComponentから見える位置(スコープ)に記述して下さい。

VBであれば、ドロップダウンよりInitializeComponentを選択して同様に行って下さい。

 

また、exDataGridVIewをカスタムコントロールにしてしまえば、それをツールボックスに配置し、デザイナで使うことができるようになります。


2008年10月2日木曜日 14:48 ✅回答済み

e.CellStyle.BackColorというのは現在のセルの背景色です。この背景色はColor構造体のインスタンスです。ある背景色を表すColor構造体でありながら、それを無視してAliceBlueになれと言っているのでワーニングを受けているのでしょう。

なので、AliceBlueであるColor構造体のインスタンスを新規に作成して渡してあげればよいです。

Dim backBrush As New SolidBrush(Color.AliceBlue)


2008年10月2日木曜日 14:57 ✅回答済み

テストプロジェクトを作ってやってみました。

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        DataGridView1.Columns.Add("a1", "Team")
        DataGridView1.Columns.Add("a2", "Name")
        DataGridView1.Columns.Add("a3", "AB")
        DataGridView1.Columns.Add("a4", "BA")
        DataGridView1.Columns.Add("a5", "SLG")
        DataGridView1.Columns.Add("a6", "OPS")
        DataGridView1.Columns.Add("a7", "SO")
        DataGridView1.Columns(0).Width = 40
        DataGridView1.Columns(1).Width = 40
        DataGridView1.Columns(2).Width = 40
        DataGridView1.Columns(3).Width = 40
        DataGridView1.Columns(4).Width = 40
        DataGridView1.Columns(5).Width = 40
        DataGridView1.Columns(6).Width = 40

        Dim GL As New Generic.List(Of Integer)
        GL.Add(2)
        GL.Add(0)
        GL.Add(0)
        GL.Add(2)
        DataGridView1.ドッキングセル = GL
        Dim text() As String = {" Number One", "", "", "   Sluger!"}
        DataGridView1.FullHedTxt = text
        DataGridView1.Rows.Add()
        DataGridView1(0, 0).Value = "SEA"
        DataGridView1(1, 0).Value = "Ichiro"
        DataGridView1(2, 0).Value = 438
        DataGridView1(3, 0).Value = 0.345
        DataGridView1(4, 0).Value = 0.543
        DataGridView1(5, 0).Value = 0.876
        DataGridView1(6, 0).Value = 25
    End Sub

こんなんでちゃんと表示されました。

exdatagridviewはとても有用な資産だと思います。

コンポーネントを変更すれば、機能が増えるだけでまったく問題ありません。

ありがとうございあmす。

 


2008年10月2日木曜日 15:04 ✅回答済み

 窓際族 さんからの引用

InitializeComponent(だけでなく、

  Friend WithEvents DataGridView1 As System.Windows.Forms.DataGridView

にもありますが、こっちも変えなくていいのですか。

 

ExDataGridViewに変えるのが正解でしょう。なぜならDataGridView1 の型はExDataGridViewだからです。


2006年10月7日土曜日 0:53

全く同じ内容で悩んでいます。

現在はdatagridviewをキーワードに検索をかけている最中でこのサイトにきました。

追加キーワードでも構いませんのでご教授下さる様お願いします。


2006年10月8日日曜日 8:21

下のような感じのヘッダー2段表示プラス結合のDataGridViewを作ってみました


2006年10月8日日曜日 10:51

 

 

A???

B???

1?

2?

1?

2?

 

10

8

32

9

 

6

6

7

32

 

14

11

20

17

 


2006年10月11日水曜日 9:05

 DataGridViewを継承してDataGridViewのヘッダー2段表示プラス結合表示を作ってみました

 


2007年1月19日金曜日 9:53

**.**Net2005のC#で開発をしていて、ヘッダの二段表示が必要でいろいろ調べていましたが、

かずbooさんのサンプルソースを元に、DataGridViewのカスタムクラスを作って解決することが出来ました。

ありがとうございました。


2007年2月1日木曜日 5:42

そのまんまの内容で私も悩んでいます。

いろいろサイトを調べてみましたが、

私には難しい内容でした。

どなたか、いいサンプル情報がある場所を

ご存知ないでしょうか?・・・

よろしくお願いします。

 


2008年6月5日木曜日 2:07

ご教授お願いいたします。

 

VB2005で上記アンプルの様なテーブルを表示する場合の具体的なコードはどのようになるのでしょうか。

追加したexDataGridVIewクラスを眺めていますが、素人にはチョット読みきれません。 具体的なコードからDebug機能を使いステップbyステップで確認しなから勉強したいと思っています。

 

宜しくお願いいたします。


2008年10月2日木曜日 11:44

すいません。

exDataGridVIewを使ってみたいと思ってます。

デザイナーにドロップできませんから、

フォームに大きさを指定して貼るんですか?

datagridview1をexDataGridVIewに変身させることはできませんですよね。

初心者ですいません。ご教示ください。

 


2008年10月2日木曜日 13:46

いつもお世話になっております。

ご教示ありがとうございます。

実はちゃっかりクラスに入れて使っています。

this.dataGridView1 = new exDataGridVIew();

こわいけど、やってみます。

 

色が気に食わないので、

 Dim backBrush As New SolidBrush(e.CellStyle.BackColor)

 Dim backBrush As New SolidBrush(e.CellStyle.BackColor.AliceBlue)

に変更すると、入れ子にしてるから正しく反映されないという警告を受けます。

でも、ちゃんと描画しますが、どうなんでしょう。

正しい、色の変え方はどうするのですか?

 


2008年10月2日木曜日 14:00

InitializeComponent(だけでなく、

  Friend WithEvents DataGridView1 As System.Windows.Forms.DataGridView

にもありますが、こっちも変えなくていいのですか。

以前、この辺いじって全滅したことがあるので、こわいです。

 


2008年10月3日金曜日 9:29

 

ご返信ありがとうございます。

回答済マークの付け方がわかりません。どうするのでしょうか。

 

exDataGridViewは少々変更しました。

単一層のグリッドと入れ換えて使っているので、そのあたりを変更しました。

また、ヘッダーテキストのアラインセンタープロパティも増やしました。

ヘッダーの真ん中に字がかけないと気分が悪いですから。

 

ただし、横スクロールに対する、文字の再描画が不十分です。

上段の文字だけ消えたままです。下段は大丈夫です。どこが不十分なのか検討してみます。

 

exDataGridViewはとても気に入りました。常駐クラスにします。

ありがとうございます。


2008年10月3日金曜日 9:40

 窓際族 さんからの引用

回答済マークの付け方がわかりません。どうするのでしょうか。

 

それぞれの書き込みの右上に回答済みというボタンがありますので、それを押せば回答済みになります。


2008年10月7日火曜日 3:44

こんにちは、フォーラムオペレータ 大久保です。

 

本スレッドは 窓際族 さんが立てたものではないので、チェックボタンは出てこなくて正しいですよ。

そして、こういうときこそフォーラムオペレータの出番ですよ。

 

というわけで、皆様の有益な情報をより有効に役立てるべく、回答済みチェックをつけさせていただきました。

皆様、今後ともよろしくお願いします


2009年11月26日木曜日 12:16

すみません。かずbooさまの2006年11月3日 3:16のコードをそのまま拝借して、dllにしてしまうおうと思ったのですが、エラーがでます。

手順としてはVS2008でVBでのクラスライブラリ。
vbファイルのまんまコードをはりつけています。

しかしながら
Imports System.Windows.Forms
Imports System.Drawing
で波線がはいっていて、41のエラーがあります。

何か基本的な勘違いがありますか?

ご教示ください・。


2009年11月26日木曜日 15:25

Imports System.Windows.Forms
Imports System.Drawing
で波線がはいっていて、41のエラーがあります。

何か基本的な勘違いがありますか?

ご教示ください・。

必要なアセンブリが足りません。
「プロジェクト」→ 「参照の追加」 で

System.Windows.Forms
System.Drawing

の二つを加えてください。


2009年11月26日木曜日 16:25

ひらぽんさん

遅くにありがとうございます!
できました!