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

DataGridの自動幅調節について

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

下記を参考にさせていただき、DataGridの自動幅調節を
行いたいのですが、データテーブルを使わない方法でアクセスしているので
Dim dt As DataTable = CType(grid.DataSource, DataTable)の部分で
エラーとなってしまいます。
その場合は、なにを指定すればよいのでしょうか?
よろしくお願いします。

      'DataGridのGraphicsを取得
        Dim g As Graphics = Graphics.FromHwnd(grid.Handle)

        'すべてのセルを調べて、一番広い幅を取得
        Dim sf As New StringFormat(StringFormat.GenericTypographic)
        Dim dt As DataTable = CType(grid.DataSource, DataTable)
        Dim rowsCount As Integer = dt.Rows.Count
        Dim maxWidth As Single = 0
        Dim i As Integer

        For i = 0 To rowsCount - 1
            Dim [text] As String = grid(i, column).ToString()
            maxWidth = Math.Max(g.MeasureString( _
                [text], grid.Font, grid.Width, sf).Width, maxWidth)
        Next i

        'ヘッダの幅も考慮
        Dim cs As DataGridColumnStyle = _
            grid.TableStyles(dt.TableName).GridColumnStyles(column)

        maxWidth = Math.Max(g.MeasureString( _
            cs.HeaderText, grid.Font, grid.Width, sf).Width, maxWidth)

        '破棄
        g.Dispose()

        '幅の変更
        cs.Width = CInt(maxWidth) + 8
■No15288に返信(いちすけさんの記事)
> 下記を参考にさせていただき、DataGridの自動幅調節を
> 行いたいのですが、データテーブルを使わない方法でアクセスしているので
> Dim dt As DataTable = CType(grid.DataSource, DataTable)の部分で
> エラーとなってしまいます。

grid.DataSourceはDataTableですか?もしDataSetなどであれば、対象となるDataTableを取得してdtに入れてください。
> grid.DataSourceはDataTableですか?もしDataSetなどであれば、対象となるDataTableを取得してdtに入れてください。

DataSetです。
初めて2週間のためよく解っておらず、
質問も曖昧ですみません。

DataSetのDataTableかな?と思い実行してみましたが、
エラーではじかれてしまった為質問しました。

Sharedキーワードをはずすことですんなり解決しました。
ありがとうございました。
解決です。
解決済み!

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