DOBON.NETプログラミング掲示板過去ログ
DataGridのセル幅を動的に変えたい
題名: DataGridのセル幅を動的に変えたい
著者: 初心者
日時: 2006/07/04 16:30:57
ID: 16445
この記事の返信元:
(なし)
この記事への返信:
[16447]
Re[1]: DataGridのセル幅を動的に変えたい
trapemiya
2006/07/04 17:08:32
ツリーを表示
環境/言語:[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 ・・・・
の時点でオブジェクトインスタンスに設定されてない旨の例外が検出されます。
よろしければご教授お願いいたします。
題名: Re[1]: DataGridのセル幅を動的に変えたい
著者: trapemiya
URL:
http://blogs.wankuma.com/trapemiya
日時: 2006/07/04 17:08:32
ID: 16447
この記事の返信元:
[16445]
DataGridのセル幅を動的に変えたい
初心者
2006/07/04 16:30:57
この記事への返信:
[16448]
Re[2]: DataGridのセル幅を動的に変えたい
ぶんぶん(初心者)
2006/07/04 17:30:04
ツリーを表示
DataGridColumnStyle cs = grid.TableStyles[dt.DataSet.Tables[0].TableName].GridColumnStyles[column];
普通に考えれば、dt.DataSet.Tables[0].TableNameで得られる名前が、TableStylesコレクション内に無いということになるんですが、その辺りは大丈夫でしょうか?
題名: Re[2]: DataGridのセル幅を動的に変えたい
著者: ぶんぶん(初心者)
日時: 2006/07/04 17:30:04
ID: 16448
この記事の返信元:
[16447]
Re[1]: DataGridのセル幅を動的に変えたい
trapemiya
2006/07/04 17:08:32
この記事への返信:
(なし)
ツリーを表示
> 普通に考えれば、dt.DataSet.Tables[0].TableNameで得られる名前が、TableStylesコレクション内に無いということになるんですが、その辺りは大丈夫でしょうか?
dataGridプロパティを調べてみたところ、追加されていませんでした。
MappingNameをdt.DataSet.Tables[0].TableNameと同じにすると正常に動きました。
全てコード上で解決しようとしていたのが悪かったようです。
この3日間はなんだったんだ…。
もし次機会があれば、もっと詳しく調べた後にご質問させていただきたいと思います。
ありがとうございました。
DOBON.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 ・・・・
の時点でオブジェクトインスタンスに設定されてない旨の例外が検出されます。
よろしければご教授お願いいたします。