- PR -

Datagridの列の幅の変更について

投稿者投稿内容
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2003-04-14 17:39
またまたお世話さまです。

ASP.NET(VB)のコードでDatadridの列の幅を指定
したいのですが、2列目以降が変更できません。

ヘッダー1|ヘッダー2|ヘッダー3|…
アイテム1|アイテム2|アイテム3|…

というグリッドにおいて
Datagrid.Columns(0).HeaderStyle.Width = Unit.Pixel(300)
と指定するとヘッダー1の列は確かに大きくなるのですが、
Datagrid.Columns(1).HeaderStyle.Width = Unit.Pixel(200)
とすると
「インデックスが範囲を越えています。」というエラーが出ます。

ちなみに、グリッドのデザイン画面では1列しかなく、
コード内で動的に列を生成してはいます。

それともう一つ。^^;
列名を折り返したくにないので、
HeadderStyle.Wrap = False
にもしていたのですが、あっけなく折り返してくれます。T_T
ここらへんを有効にするには後何の指定が必要になるのでしょうか?

ご教示のほど、宜しくお願い致します。
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-04-14 18:09
こんにちは。

>ちなみに、グリッドのデザイン画面では1列しかなく、
>コード内で動的に列を生成してはいます。

動的に列を生成した後に HeaderStyle.Width の設定を行なっては
どうですか?
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2003-04-14 18:23
こんにちは!
先程はありがとうございました。
おかげさまでページコントロールは上手く行きました。

で、今回のWEBページのコーディングですが、下記のようになっています。

SqlDataAdapter1.SelectCommand.CommandText = "SELECT A,B,C FROM TABLE"
SqlDataAdapter1.Fill(TableDataSet1)
  With grdTable2
    .DataSource = TableDataSet1
    .AllowCustomPaging = False
    .AllowPaging = True
    .AutoGenerateColumns = True
    .Enabled = True
    .EnableViewState = True
    .PagerStyle.Mode = PagerMode.NumericPages
    .PagerStyle.PageButtonCount = 10
    .PageSize = 10
    .Width = Unit.Pixel(2000)
    .Columns(1).HeaderStyle.Width = Unit.Pixel(300)…@
  End With

If Not Page.IsPostBack Then
  grdTable2.DataBind()
End If

@の部分をColumns(0)だと1列目の幅は変化してくれます。

動的に列を生成した後にHeaderStyle.Widthの設定を行う
というのはどの直後のことを指すのでしょうか?

お手数をおかけして申し訳ありませんが、ご指導のほど
宜しくお願い致します。
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-04-14 18:41
こんにちは。

>  grdTable2.DataBind()
この処理によって、DataSourceで指定しているデータソース(今回の場合 TableDataSet1)
との連結が行なわれます。そのため、この時点で動的に生成されるとみなしてもよいかと
思います。
というわけで、HeaderStyle.Widthの設定はDataBind()の後ということになります。
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2003-04-14 18:57
お世話さまです。
たびたびすみません。

grdTable2.DataBind()
の直下に
grdTable2.Columns(1).HeaderStyle.Width = Unit.Pixel(300)
を置いて実行してみましたところ、やはり同じインデックスエラーとなりました。

同じく直下に
grdTable2.Columns(0).HeaderStyle.Width = Unit.Pixel(300)
で実行したところ、見た目に変化はありませんでした。

更に直下に
grdTable2.HeaderStyle.Width = Unit.Pixel(300)
としても変化なしでした。

もしかしてこの後に更に再描画をさせるコマンドが何かが
必要だったのでしょうか?

お手数をおかけして本当に申し訳ありませんです。m()m
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-04-14 19:17
こんにちは。

動作検証せずに、間違ったお答えをして、すみません。(^^;

HELPの DataGrid.Columnsプロパティの説明の中に
「自動的に生成された列は、 Columns コレクションに追加されません。」
と記述されていました。

となると、デザイン時にバインドする列を作っておくか、プログラムで
Columnsに Add していくかといったところっぽいですね。
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2003-04-14 21:27
こんばんは!
帰宅でレスが遅れて申し訳ありません。^^;

>「自動的に生成された列は、 Columns コレクションに追加されません。」
うゎー、そうだったんですか!

>となると、デザイン時にバインドする列を作っておくか、プログラムで
Columnsに Add していくかといったところっぽいですね。
明日は早速そのセンで攻めてみたいと思います。

長々とお付き合い下さり、誠にありがとうございました。

おかげさまで前途にもかすかな光が射してきたような
気が致します。^^;
あい
会議室デビュー日: 2003/06/04
投稿数: 15
投稿日時: 2003-06-24 22:45
間に入ってすみません。
今、私はまったく同じところでつまづいています。

>>デザイン時にバインドする列を作っておくか、プログラムで
>>Columnsに Add していくかといったところっぽいですね。

その後の投稿がないので...ご教授願います。

スキルアップ/キャリアアップ(JOB@IT)