- - PR -
GridViewでDatatableをバインドしたら、Columns.Countが0になってる。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-09-27 18:25
動的にDataTableを作成して、それをGridViewにバインドしています。
1列目を固定にするためにCSSCLASSを設定したいのですが、 Columns.Countが0になって設定できません。 どうしてColumns.Countが0になるのか教えていただけないでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 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 | ||||
|
投稿日時: 2007-09-27 20:08
http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview.columns(VS.80).aspx
の解説のメモのところに書いてあります。 GridView.AutoGenerateColumnsプロパティをfalseに設定して 自分でカラムを追加しておくといけると思います。 | ||||
|
投稿日時: 2007-09-27 20:15
otf様、返信ありがとうございます。
そういう仕様なのですね。 >GridView.AutoGenerateColumnsプロパティをfalseに設定して >自分でカラムを追加しておくといけると思います。 もし、自分でカラムを追加するとすれば、Datatableをバインドしなくて、直接、Gridviewのカラムを追加していくと言うことになるのでしょうか? いまから、調べてやってみます。 | ||||
|
投稿日時: 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 | ||||
|
投稿日時: 2007-09-28 08:58
otfさんが示してくださっている URL のサンプルコードの <Columns> タグ内参照。aspx内に事前定義しておきます。 | ||||
|
投稿日時: 2007-09-28 11:05
まるくさん、返答ありがとうございます。
動的にGridViewを作成したいので(列の数が変わる)、事前定義ではなくて、動的に作成したいと考えていました。 Columnsコレクションが増えないので、 For i = 0 To 10 GridView1.Rows(i).Cells(0).CssClass = "FreezingCol" Next セルに直接、設定してなんとか固定できました。 しかし、動きが重すぎて使いづらく実用に耐えられません。 GridViewはSqlDataSourceなどのデータソースコントロールと使用するための物で、こういう使い方は間違っているのかもしれません。 | ||||
|
投稿日時: 2007-09-28 13:39
表示行数・列数が多いのが一因では? 最終的には HTML ですから、GridView とは無関係だと思います。 どちらかというとスタイルシートによる列固定が重めなのかなぁ、と。 スタイルシートによる列固定は実業務で使ったことありませんが、IFRAME や DIV で複数テーブルを連動させた時には、そこそこのデータ量でもスムーズに動きます。 |
1