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

GridViewでの幅固定

環境/言語:[.NetFramework2.0]
分類:[ASP.NET]

GridViewで各列を固定幅にしようと思って、VBソース内でスタイルシート追加メソッドを使い、
1行目に「width」プロパティを設定しています。

For i As Integer = 0 To GridView.Rows(0).Cells.Count() - 1
 GridView.Rows(0).Cells(i).Style.Add("width", "50px")
Next

しかし、1行目はセルの結合を行っています。
GridView.Rows(0).Cells(0).ColumnSpan = GridView.Rows(0).Cells.Count()
For i As Integer = 1 To GridView.Rows(0).Cells.Count() - 1
 GridView.Rows(0).Cells(i).Style.Add("display", "none")
Next

つまり、HTMLでは1行目で定義した「width」プロパティを反映しますが、
1行目が結合しているため、反映されません。
当然、「width」を2行目に設定しても反映されません。


HTMLを直接書き込むなら「<colgroup>」タグを利用すれば可能なのですが、
GridViewでの対応方法はないのでしょうか。
  • 題名: Re[1]: GridViewでの幅固定
  • 著者: H.K.R.
  • 日時: 2008/04/06 23:47:25
  • ID: 21809
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
はじめまして、H.K.R.と申します。
# 引っ込んだ略 → H.K.R. にハンドルネームを変更いたします。

 私はASP.NETについてはほとんど無知なので、
 もし変なことを書いていたら申し訳ないのですが、
 以下のコードでGridView内の各セルの幅の最大値を固定にすることができましたので、
 試してみてはいかがでしょうか?

 ※ 私が試した環境:WindowsXPHomeSP2、InternetExplorer7、
           VisualWebDeveloper2008ExpressEdition(対象Frameworkは、.NET Framework 2.0)

Imports System.Data

Partial Class _Default
    Inherits System.Web.UI.Page

    ' GridView1がデザイナで配置されていることを前提とする
    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)

        Dim dt As New DataTable
        For i As Integer = 1 To 6
            dt.Columns.Add(String.Format("列 - {0}", i))
        Next
        For i As Integer = 1 To 10
            Dim dr As DataRow = dt.NewRow
            For j As Integer = 1 To dt.Columns.Count
                dr.Item(j - 1) = String.Format("{0}行目のデータ{1}", i, j)
            Next
            dt.Rows.Add(dr)
        Next
        Me.GridView1.DataSource = dt
        Me.GridView1.DataBind()
        Me.GridView1.EnableViewState = False

        For j As Integer = 1 To Me.GridView1.Rows.Count - 1
            For i As Integer = 0 To GridView1.Rows(0).Cells.Count - 1
                GridView1.Rows(j).Cells(i).Style.Add("width", "40px")
            Next
        Next

        ' しかし、1行目はセルの結合を行っています。
        GridView1.Rows(0).Cells(0).ColumnSpan = GridView1.Rows(0).Cells.Count
        GridView1.Rows(0).Cells(0).HorizontalAlign = HorizontalAlign.Center
        For i As Integer = 1 To GridView1.Rows(0).Cells.Count - 1
            GridView1.Rows(0).Cells(i).Style.Add("display", "none")
        Next

        MyBase.OnLoad(e)

    End Sub

End Class

以上です。

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