DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridに固定列を作成する

環境/言語:[XP VB.NET]
分類:[.NET]

 VB.NET で作業をしている者です。DataGridに固定列を作成することはできるのでしょうか?
 できるのであればどのような方法をとればいいのか教えてください。お願いします。
■No16185に返信(H:Hさんの記事)
>  VB.NET で作業をしている者です。DataGridに固定列を作成することはできるのでしょうか?
>  できるのであればどのような方法をとればいいのか教えてください。お願いします。

もう少し具体的にお願いできないでしょうか?
どうもすみません。やりたいことは、
DataGridのフィールドに
年、月、日、お客様氏名、注文ID・・・と並んでいるとして、
年、月、日、お客様氏名をDataGridに常時表示し、注文ID以降をスクロールさせることはできないものか、ということです。(ACCESSでいうところの列の固定のような感じで)
よろしくお願いします。
すみません。半角カナを使ってしまいました。全角でもう一度送信します。

 どうもすみません。やりたいことは、
DataGridのフィールドに
年、月、日、お客様氏名、注文ID・・・と並んでいるとして、
年、月、日、お客様氏名をDataGridに常時表示し、注文ID以降をスクロールさせることはできないものか、ということです。(ACCESSでいうところの列の固定のような感じで)
よろしくお願いします。
.NET 2.0のDataGridViewなら、プロパティの設定で終わりですが、
.NET 1.1のDataGridであれば、以下のようにしてやるしかないでしょう。

DataGridを2つ並べる。左をdtgd_item1とし、右をdtgd_item2とする。
dtgd_item1が左の固定した列表示用、dtgd_item2は右の横スクロールする列用です。
2つのDataGridは、以下のクラスからインスタンスを作成する。

public class MyDataGrid :System.Windows.Forms.DataGrid
{
    public MyDataGrid()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public ScrollBar vScrollbar
    {
        get
        {
            return this.VertScrollBar;
        }
    }

    public ScrollBar hScrollbar
    {
        get
        {
            return this.HorizScrollBar;
        }
    }

    public void SetTopRow(int rowNum)
    {
        ScrollEventArgs args = 
            new ScrollEventArgs(ScrollEventType.LargeIncrement, rowNum);
        GridVScrolled(this, args);
    }

}

dtgd_itemのスクロールイベントで、

private void dtgd_item_Scroll(object sender, System.EventArgs e)
{
    dtgd_item2.SetTopRow(dtgd_item.vScrollbar.Value);
}

#ホイールを使うのであれば、ホイールにも対応したコードが必要になるでしょう。
過去ログにも同じ質問があります。「DataGrid 固定」で検索すれば、すぐに見つかったかと思います。

DataGridで列を固定
http://dobon.net/vb/bbs/log3-22/13531.html
■No16219に返信(管理人さんの記事)
> 過去ログにも同じ質問があります。「DataGrid 固定」で検索すれば、すぐに見つかったかと思います。
>
> DataGridで列を固定
> http://dobon.net/vb/bbs/log3-22/13531.html
>
たいへんありがとうございました。参考になりました。
また出張中だったため返信が遅くなってしまったことをお詫びいたします。
早速やってみたいと思います。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板