- PR -

ASP.Net DataGridの文字数制限

投稿者投稿内容
PiKaPiKa
会議室デビュー日: 2005/09/05
投稿数: 19
投稿日時: 2005-09-16 13:45
いつも、お世話になっています。
ASP.NetでDataGridを使ってデータを表示しようと思っています。
その際、表示できる文字数を制限したいのですが、できません。
MaxLengthなどあったらいいのですが、見当たりません。
アドバイスお願いします。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-09-16 13:58
BoundColumn.DataFormatString
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 2006-08-25 13:39
いつもお世話になっております。

Windows XP SP2
Oracle10g
Visual Web Developer2005(ASP.NET2.0)

にて開発をおこなっております。

同じような内容の質問と思われるため、返信の形で投稿させていただきます。

1文字〜50文字程度の文字が格納されているDBの値をGridViewで表示しております。
この文字を「頭から20文字だけに制限」して表示したいのですが、
『BoundColumn.DataFormatString』
ということですので、GridViewの
HtmlEncode = False
とセットし、該当のフィールドで
DataFormatString = {0:c20}
等と設定してみたのですが、20文字制限されずに表示されてしまいました。
(cは通貨型だから動かないのは当然か・・・)

http://msdn2.microsoft.com/ja-JP/library/system.web.ui.webcontrols.boundfield.dataformatstring.aspx
http://msdn2.microsoft.com/ja-jp/library/26etazsy.aspx
あたりを読むに、数値や日付などは{0:c}{0:d}などの指定は確かにできているのですが、文字列の文字数制御ということになった場合、上記のような単純な指定方法ではできないものなのでしょうか?
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-08-25 13:43
クライアント側(JavaScript)で制御しても出来そうですね。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-08-25 13:53
こんにちは。

古い記憶で申し訳ありませんが、以前私が取った方法は DataBinding イベン
トでデータをゴニョゴニョしました。

>> ひろれいさん
JavaScript だと件数が多くなったときに大変そうです orz
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-08-25 14:11
引用:

ぽぴ王子さんの書き込み (2006-08-25 13:53) より:

>> ひろれいさん
JavaScript だと件数が多くなったときに大変そうです orz


あれっ?
僕のイメージが違うのかな。何せ、VWD2005 は今週から使い始めたところだし、GridView は使ったことないので(^_^;)

VS.NET2003 の DataGrid のイメージで考えると、ページ制御しているかな、と。
で、表示は、
コード:
  Text='<%# databinder.eval(container.dataitem,"hogehoge") %>'


ってな感じかな、と。なので、これを、
コード:
  <script runat="server">
    Function hoge(ByVal hoge As String) As String
      処理
    End Function
  </script>

  Text='<%# hoge(databinder.eval(container.dataitem,"hogehoge")) %>'


ってな感じにすればいいのかな、と思ったのですが。
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 2006-08-25 14:57
ひろれいさん、ぽぴ王子さん、ご返信ありがとうございました。

教えていただいた方法とは別の方法ですが、何とか実現することができました。
ただこの方法がベストとは思えず、
「これでいいのかな?」
と疑問に思っている次第です。

Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.DataBound

For Each row As GridViewRow In GridView1.Rows

Dim TextValue As String

TextValue = GridView1.Rows(row.RowIndex).Cells(6).Text
GridView1.Rows(row.RowIndex).Cells(6).Text = Mid(TextValue, 1, 20)
Next

end sub

とやってみることで、頭から20文字のみを表示することができました。
てっきりDataFormatStringを使用して、{0:c2}みたいな感じで設定すれば、日付や貨幣の変換と同様に簡単にできるもんだとばかり思っておりました。
そう簡単にはいかないんですね。(つД`)


ただこの方法だと、一度データバインドがすべて完了した後に、1行目から最終行まで見直して再度、変換処理を行っているため、処理的に無駄なところが出ているように思えます。
(ページングを使用して、1ページ10行程度なので、行数的には多くはないのですが)


ぽぴ王子さんのおっしゃるDataBindingの方法や、それこそひろれいさんの掲示してくださった方法の方が断然スマートですよね。

そちらの方法でできないものかと、もうちょっと考えてみます。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-08-25 17:47
こんにちは。

よく考えたら、特に編集する項目じゃなければ SQL で切っちゃっても良かった
気がしました。

引用:

ひろれいさんの書き込み (2006-08-25 14:11) より:

コード:
    <script runat="server">
        Function hoge(ByVal hoge As String) As String
            処理
        End Function
    </script>




runat="server" と書いている時点ですでにJavaScriptではない希ガス…

僕がイメージしたひろれいさんの方法(JavaScript を使う)は NGO さんが書
かれたような、全部出力した(この場合はクライアントで表示し終わった)あとで
JavaScript でループをまわして切る…という感じでした。
それだと件数が多くなったときにループを回すの大変じゃないのかなとか、そも
そも出力する必要がない21文字目以降の文字も転送した後で切っちゃうのはも
ったいないおばけが出るんじゃないかとか、少し考えてしまったわけで…
BGM:北の国から(さだまさし)
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。

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