- PR -

GridViewでDatatableをバインドしたら、Columns.Countが0になってる。

1
投稿者投稿内容
jiioi
会議室デビュー日: 2007/09/27
投稿数: 14
投稿日時: 2007-09-27 18:25
動的にDataTableを作成して、それをGridViewにバインドしています。
1列目を固定にするためにCSSCLASSを設定したいのですが、
Columns.Countが0になって設定できません。
どうしてColumns.Countが0になるのか教えていただけないでしょうか?
よろしくお願いします。
jiioi
会議室デビュー日: 2007/09/27
投稿数: 14
投稿日時: 2007-09-27 18:52
説明がうまくできないので、コードを提示します。

たとえば、aspxのWebフォームにGridView1を貼り付けていて、下記のコードをaspx.vbに書いています。データバインドした後にもかかわらず、Columns.Countが0なので、エラーが起きてしまいます。
どう対処してよいのかわからず、途方にくれてます。ご教授よろしくおねがいします。


Private Sub GridView_Bind()

 Dim dt As New DataTable
 Dim dr As DataRow
 Dim tex As String

 dt.Columns.Add(New DataColumn("日時", GetType(String)))
 For i As Integer = 1 To 5
  tex = i.ToString
  dt.Columns.Add(New DataColumn(tex, GetType(String)))
 Next i

 dr = dt.NewRow()
 dr(0) = "2007/10/10 00:00"
 dr(1) = "おもち"
 dr(2) = "りんご"
 dr(3) = "カレー"
 dr(4) = "吉野家"
 dr(5) = "チョコレート"
 dt.Rows.Add(dr)
 GridView1.DataSource = dt
 GridView1.DataBind()

 Dim col As Integer = Me.GridView1.Columns.Count

 '↑ここでcolが0になる。  6になるのでは???

 With GridView1.Columns(0) ’←ここでエラー!!!
  .ItemStyle.CssClass = "FreezingCol"
  .HeaderStyle.CssClass = "FreezingCol"
 End With

End Sub
otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2007-09-27 20:08
http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview.columns(VS.80).aspx
の解説のメモのところに書いてあります。

GridView.AutoGenerateColumnsプロパティをfalseに設定して
自分でカラムを追加しておくといけると思います。
jiioi
会議室デビュー日: 2007/09/27
投稿数: 14
投稿日時: 2007-09-27 20:15
otf様、返信ありがとうございます。

そういう仕様なのですね。

>GridView.AutoGenerateColumnsプロパティをfalseに設定して
>自分でカラムを追加しておくといけると思います。

もし、自分でカラムを追加するとすれば、Datatableをバインドしなくて、直接、Gridviewのカラムを追加していくと言うことになるのでしょうか?
いまから、調べてやってみます。

jiioi
会議室デビュー日: 2007/09/27
投稿数: 14
投稿日時: 2007-09-27 21:14
自分でGridViewにカラムを追加していく方法がわかりません。
お分かりになる方、教えてください。よろしくお願いします。

Private Sub GridView_Bind()

 Dim tex As String

 GridView1.Columns.Add(New DataColumn("日時", GetType(String)))
 For i As Integer = 1 To 5
  tex = i.ToString
  GridView1.Columns.Add(New DataColumn(tex, GetType(String)))
 Next i

 dim dr() as string
 dr(0) = "2007/10/10 00:00"
 dr(1) = "おもち"
 dr(2) = "りんご"
 dr(3) = "カレー"
 dr(4) = "吉野家"
 dr(5) = "チョコレート"
 GridView1.Rows.Add(dr)

End Sub
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-09-28 08:58
引用:

jiioiさんの書き込み (2007-09-27 21:14) より:
自分でGridViewにカラムを追加していく方法がわかりません。



otfさんが示してくださっている URL のサンプルコードの <Columns> タグ内参照。aspx内に事前定義しておきます。
jiioi
会議室デビュー日: 2007/09/27
投稿数: 14
投稿日時: 2007-09-28 11:05
まるくさん、返答ありがとうございます。

動的にGridViewを作成したいので(列の数が変わる)、事前定義ではなくて、動的に作成したいと考えていました。
Columnsコレクションが増えないので、
 For i = 0 To 10
  GridView1.Rows(i).Cells(0).CssClass = "FreezingCol"
 Next
セルに直接、設定してなんとか固定できました。
しかし、動きが重すぎて使いづらく実用に耐えられません。

GridViewはSqlDataSourceなどのデータソースコントロールと使用するための物で、こういう使い方は間違っているのかもしれません。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-09-28 13:39
引用:

しかし、動きが重すぎて使いづらく実用に耐えられません。



表示行数・列数が多いのが一因では?

最終的には HTML ですから、GridView とは無関係だと思います。
どちらかというとスタイルシートによる列固定が重めなのかなぁ、と。

スタイルシートによる列固定は実業務で使ったことありませんが、IFRAME や DIV で複数テーブルを連動させた時には、そこそこのデータ量でもスムーズに動きます。
1

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