none
gridviewの列幅を固定する RRS feed

  • 質問

  • gridviewを使用してデータの一覧を表示しています。

    それぞれのフィールドの列幅を固定したいのですが
    どうしたらいいでしょうか?

    挿入する文字が列幅より長くなった場合
    スクロールなどはさせず
    列幅におさまるぶんだけ表示させるようにしたいです。

    ネットで検索してみたりしたのですが
    どうしても分からず質問させていただきました。

    よろしくお願いいたします!

    %@ Page Language="VB"を使用しています。
    2011年11月21日 7:00

回答

  • 以下にいくつかやり方が載っており、コードもありますので、参考になるのではないかと思います。基本的にスタイルで列幅を固定しています。

    how to fix column width of gridview
    http://forums.asp.net/t/1739285.aspx/1/10

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク nonamasu 2011年11月24日 1:32
    2011年11月22日 1:05
    モデレータ
  • 「氏名」というのは、現代の日本人の漢字の姓名でしょうか?

    であれば、ある程度長さは予想できるので、多少余裕を持って
    GridView の当該列幅を設定しておけば、ほとんどのケースで枠
    内におさまるのではないでしょうか。漢字なら固定ピッチフォ
    ント、プロポーショナルフォントの違いはそれほど全長に差は
    でなそうですし。

    カットするなら、文字列を SQL Server などのデータベースか
    ら取得しているのであれば、その際に文字数を制限して取得す
    るなどの手段を考えてはいかがでしょう。

    関数を使ってSELECT文をパワーアップさせる
    http://www.atmarkit.co.jp/fdb/rensai/tsql03/tsql03_3.html

    または、RowDataBound イベントのハンドラで当該列の文字列を
    取得して String.Substring メソッドで適当な長さにカットする
    とか。


    ところで先のスレッド「CheckBox Listの内容をすべてGridView
    に反映させる」の問題は解決したのでしょうか。解決したのであ
    ればそのスレッドはクローズしてください。

     

    • 回答としてマーク nonamasu 2011年11月24日 1:32
    2011年11月22日 13:13

すべての返信

  • 例えば以下が参考になると思います。

    GridViewで列幅を固定にする方法
    http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43595&forum=7

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年11月21日 7:45
    モデレータ
  • > 挿入する文字が列幅より長くなった場合
    > スクロールなどはさせず
    > 列幅におさまるぶんだけ表示させるようにしたいです。

    文字の大きさは固定という条件で、文字列の文字数を数えて、列幅に収まら
    ない場合、たとえば、

    あいうえおかきくけこさしすせそ

    を、

    あいう・・・

    というようにすればいいのでしょうか? 違う場合は、もう少し具体的にや
    りたいことを書いてください。

    その他、現在の GridView のコードなども必要最小限示していただけると、
    回答しやすいです。

    2011年11月21日 12:21
  • SurferOnWww

    ご回答ありがとうございます!

    コードは以下のようになっています。
    ID(ID)、日付(Date)、氏名(Name)の一覧表です。
    日付とIDのところに長さを指定してみたのですが(★)
    データの内容が指定の長さ以上になると
    列幅が勝手に伸びてしまいます。

                    <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="True"
                        ReadOnly="True" SortExpression="ID" />

                    <asp:TemplateField HeaderText="日付" SortExpression="Date">
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server"
                                Text='<%# Bind("Date","{0:yyyy/MM/dd(ddd)}") %>'></asp:Label>
                        </ItemTemplate>
                        <ControlStyle Width="100px" />★
                    </asp:TemplateField>

                    <asp:BoundField DataField="Name" HeaderText="氏名" SortExpression="Name" >
                    <ControlStyle Width="250px" />★
                    </asp:BoundField>

    やりたいことは
    SurferOnWwwさんがおっしゃってくださったように
    たとえば氏名が
    ”あいうえおかきくけこさし”
    とすごーく長かった場合でも
    250pxにおさまる長さだけ表示してくれればいいです。

    よろしくお願いいたします!

     

     


    • 編集済み nonamasu 2011年11月22日 0:31
    2011年11月22日 0:27
  • trapemiya

     

    ご回答ありがとうございます!

     

    こちらのこちらのページ読んでみたのですが

    高度すぎて理解できませんでした・・・。

    改行で表示したり、スクロールを入れたりするのではなく

    指定した長さの中におさまるようにデータを表示したいです。

     

    たとえば

    ”あいうえおかきくけ”

    というデータだったとしても

    【あいう】

    だけさせたいと思っています。

     

    よろしくお願いいたします!

     


    • 編集済み nonamasu 2011年11月22日 0:30
    2011年11月22日 0:29
  • 以下にいくつかやり方が載っており、コードもありますので、参考になるのではないかと思います。基本的にスタイルで列幅を固定しています。

    how to fix column width of gridview
    http://forums.asp.net/t/1739285.aspx/1/10

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク nonamasu 2011年11月24日 1:32
    2011年11月22日 1:05
    モデレータ
  • 「氏名」というのは、現代の日本人の漢字の姓名でしょうか?

    であれば、ある程度長さは予想できるので、多少余裕を持って
    GridView の当該列幅を設定しておけば、ほとんどのケースで枠
    内におさまるのではないでしょうか。漢字なら固定ピッチフォ
    ント、プロポーショナルフォントの違いはそれほど全長に差は
    でなそうですし。

    カットするなら、文字列を SQL Server などのデータベースか
    ら取得しているのであれば、その際に文字数を制限して取得す
    るなどの手段を考えてはいかがでしょう。

    関数を使ってSELECT文をパワーアップさせる
    http://www.atmarkit.co.jp/fdb/rensai/tsql03/tsql03_3.html

    または、RowDataBound イベントのハンドラで当該列の文字列を
    取得して String.Substring メソッドで適当な長さにカットする
    とか。


    ところで先のスレッド「CheckBox Listの内容をすべてGridView
    に反映させる」の問題は解決したのでしょうか。解決したのであ
    ればそのスレッドはクローズしてください。

     

    • 回答としてマーク nonamasu 2011年11月24日 1:32
    2011年11月22日 13:13
  • ご回答ありがとうございます!

    え、英語・・・
    と思ったのですが、とりあえず何とか理解できそうなものの中から
    いきなりコードをコピペしてみて色々中身を改良したところなんとかできました!

    フィールドをテンプレートフィールドに変換し
    以下の部分に【"Width="150px"】を書き加えました。

    <ItemTemplate>
    <asp:LabelID="Label2" runat="server "Width="150px" Text='<%#Bind("Name")%>'></asp:Label>
    </ItemTemplate>

    折り返してデータが表示されてしまうところがちょっと不満なのですが
    なんとか形になり今のところは満足しています。

    何度もご回答ありがとうございました!

     

    2011年11月24日 1:20
  • ご回答ありがとうございます!

    データベースから文字数を制限して取得する方法
    ぜひ試してみたいと思ったのですが
    現在元データにAccessを使用しているうえ
    visual web developerの無料試用期限が迫っていて
    データベースから作り直してやってみるには
    大変な知識不足ということもあり
    時間が足りなそうです・・・。

    そんな事情もあり今回は
    フィールドの長さを指定してデータを折り返して表示するという
    方法をとりました。

    試用期限内にある程度のものが出来上がって
    上司からOKが出たらソフトを購入してもらえそうなので
    そうしたら教えていただいた方法で
    作り込みをしてみたいと思います!

    本当にありがとうございました!!

    ちなみにスレッドのクローズ方法として
    ”回答としてマーク”にチェックを入れてみたのですが
    この方法でいいのでしょうか・・・?

    2011年11月24日 1:31