none
DataGridの列の幅を指定したサイズを固定にするには? RRS feed

  • 質問

  • Visual Basic .Net 2003で開発しています。

     

    列の幅をプログラムから操作しようと思い以下のように作成しました。

     

        Function CreateDataSource() As ICollection

            ' Create sample data for the DataGrid control.
            Dim dt As DataTable = New DataTable
            Dim dr As DataRow

            Dim tableStyle As New TableItemStyle
            tableStyle.HorizontalAlign = HorizontalAlign.Center
            tableStyle.VerticalAlign = VerticalAlign.Middle
            tableStyle.Width = Unit.Pixel(100)

            ' Define the columns of the table.
            dt.Columns.Add(New DataColumn("名称", GetType(String)))
            dt.Columns.Add(New DataColumn("項目", GetType(String)))
            dt.Columns.Add(New DataColumn("数値", GetType(Double)))

            Dim i As Integer
            sampleNum = 10
            For i = 1 To sampleNum
                Dim text As String
                text = "A00" & i.ToString()
                dt.Columns.Add(New DataColumn(text, GetType(Double)))
                dt.Columns.Add(New DataColumn(i.ToString() & "件", GetType(Double)))
            Next

            ' Populate the table with sample values.

            Dim name() As String = New String() {"AAA", "BBB"}

            Dim j As Integer
            j = 0

            For i = 0 To 5

                dr = dt.NewRow()

                If i = 0 Or i = 3 Then
                    dr(0) = name(j)
                    j += 1
                End If

                dr(1) = "Item " & i.ToString()
                dr(2) = 1.23 * (i + 1)

                dt.Rows.Add(dr)

            Next i

            Dim dv As DataView = New DataView(dt)
            Return dv

        End Function


        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ' ページを初期化するユーザー コードをここに挿入します。
            BigDataGrid.DataSource = CreateDataSource()
            BigDataGrid.DataBind()

      End Sub
        Private Sub BigDataGrid_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles BigDataGrid.ItemCreated
            e.Item.Cells(0).Width = New Unit(80)
            e.Item.Cells(1).Width = New Unit(100)
            e.Item.Cells(2).Width = New Unit(50)
            Dim i As Integer
            For i = 0 To sampleNum - 1
                e.Item.Cells(3 + (2 * i)).Width = New Unit(70)
                e.Item.Cells(3 + ((2 * i) + 1)).Width = New Unit(50)
            Next

        End Sub

     

    [HTMLでの設定]

     <asp:DataGrid id="BigDataGrid" style="Z-INDEX: 105; LEFT: 32px; POSITION: absolute; TOP: 248px" runat="server" BorderWidth="2px" BorderColor="Black" BorderStyle="Solid" AutoGenerateColumns="True">
         <HeaderStyle BackColor="#C0C0FF"></HeaderStyle>
    </asp:DataGrid>

    うまくいっているように見えましたが、IEの画面サイズによっては、列の幅が指定通りにならず、なったとしても画面サイズを変更すると、設定した値が無視されて自動配置されてしまいました。

     

    更に、AutoGenerateColumns をFalseにしたとたん、表が表示されなくなってしまいました。

     

    プログラム中で列の幅を設定し、画面サイズを変更しても表の大きさが変わらない(スクロールすれば表全体が見れる)ようにするには、どうしたらよいのでしょうか。

     

    御教授お願いいたします。

     

     

     

     

    2007年5月22日 7:45

すべての返信

  •  R.Kume さんからの引用

    更に、AutoGenerateColumns をFalseにしたとたん、表が表示されなくなってしまいました。

    Trueだとデータソースの列に合わせてDataGridのColumnが自動生成されますが、FalseだとColumnが自動生成されないのでColumnを自力で登録しない限りは列が存在しない表のままですよね。

     

     R.Kume さんからの引用

    プログラム中で列の幅を設定し、画面サイズを変更しても表の大きさが変わらない(スクロールすれば表全体が見れる)ようにするには、どうしたらよいのでしょうか。

    回答ではないですが、参考にはなるかもしれません。

    DataGridのAutoGenerateColumns をFalseにしといて

    Code Snippet

    Dim col1 As New BoundColumn
      col1.HeaderText = "列1"
      col1.DataField = データソースの列名
      col1.HeaderStyle.Width = New Unit(幅の値)
      DataGrid1.Columns.Add(col1)

     というようなかんじでコードから列を追加したりしてます。

    2007年5月23日 5:36