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

DataGridのセル幅を動的に変えたい

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

連続投稿で恐縮ですが、よろしくお願いいたします。
C#でWindowsアプリケーションを開発中です。
データグリッドのセル幅を内容の長さに応じて変えたいのですが、
ネットで探しても方法が見つかりませんでした。

public void AutoSizeColumnWidth(DataGrid grid, int column)
{
//DataGridのGraphicsを取得
Graphics g = Graphics.FromHwnd(grid.Handle);

//すべてのセルを調べて、一番広い幅を取得
StringFormat sf =
new StringFormat(StringFormat.GenericTypographic);
DataTable dt = ((DataTable) grid.DataSource);
int rowsCount = dt.Rows.Count;
float maxWidth = 0;
for (int i = 0; i < rowsCount; i++)
{
string text = grid[i, column].ToString();
maxWidth = Math.Max(g.MeasureString(
text, grid.Font, grid.Width, sf).Width, maxWidth);
}

//ヘッダの幅も考慮
DataGridColumnStyle cs = grid.TableStyles[dt.DataSet.Tables[0].TableName].GridColumnStyles[column];
maxWidth = Math.Max(g.MeasureString(
cs.HeaderText, grid.Font, grid.Width, sf).Width, maxWidth);

//破棄
g.Dispose();

//幅の変更
cs.Width = (int) maxWidth + 8;
}

この DataGridColumnStyle cs ・・・・
の時点でオブジェクトインスタンスに設定されてない旨の例外が検出されます。
よろしければご教授お願いいたします。
DataGridColumnStyle cs = grid.TableStyles[dt.DataSet.Tables[0].TableName].GridColumnStyles[column];

普通に考えれば、dt.DataSet.Tables[0].TableNameで得られる名前が、TableStylesコレクション内に無いということになるんですが、その辺りは大丈夫でしょうか?
> 普通に考えれば、dt.DataSet.Tables[0].TableNameで得られる名前が、TableStylesコレクション内に無いということになるんですが、その辺りは大丈夫でしょうか?

dataGridプロパティを調べてみたところ、追加されていませんでした。
MappingNameをdt.DataSet.Tables[0].TableNameと同じにすると正常に動きました。
全てコード上で解決しようとしていたのが悪かったようです。
この3日間はなんだったんだ…。

もし次機会があれば、もっと詳しく調べた後にご質問させていただきたいと思います。
ありがとうございました。

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