- - PR -
GridViewにおけるセル結合操作に関して
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-07-04 16:58
いつもお世話になっております。
ただいま、VS2005(VB.NET)でWEBアプリケーションを開発しております。 GridViewのセル操作に関して不明な点があるので、質問させていただきます。 GridViewのデータ行において、1レコードが 1列目:RowSpan=2 2列目:上下2段 の形で表示されるようにしたいと思い、RowCreatedイベントで以下のコーディングを行いました。 ======================================================================================================== Private Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated Dim myCell As TableCell = Nothing Dim myRow As GridViewRow = Nothing Dim idx As Integer = e.Row.RowIndex If e.Row.RowType <> DataControlRowType.Header Then e.Row.Cells(0).RowSpan = 2 myCell = New TableCell myCell.Text = "idx=" & idx.ToString '2列目下段にはRowIndexを表示 myRow = New GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal) myRow.Cells.Add(myCell) Me.GridView1.Controls(0).Controls.Add(myRow) End If End Sub ======================================================================================================== あらかじめ3件のレコードをDataTableで用意し、1列目にはレコードの値、 2列目(上)には文字列"abc" を表示したところ、次のような表示になりました。 【1列目】,【2列目 上/下】 ----------------------------------- idx=0, (ブランクセル) [1レコード目の値],abc/idx=1 [2レコード目の値],abc/idx=2 [3レコード目の値],abc/idx=-1 私の予想では、 【1列目】,【2列目 上/下】 ----------------------------------- [1レコード目の値],abc/idx=0 [2レコード目の値],abc/idx=1 [3レコード目の値],abc/idx=2 となるはずだったのですが、 ・RowIndex=0のときに、1行目に挿入されてしまっている。 ・(ShowFooter=Falseにしているのに)最終行がFooter扱い(RowTypeで判断しました)になってしまっている。 と2点の予想外の現象が発生しました。上記コードにおいて、セルの操作に関する誤りがあればどうぞご指摘 ください。宜しくお願いします。 |
|
投稿日時: 2008-07-05 06:12
質問の回答ではありませんが、このような複雑な表を作成するときは、
・ListView ・Repeater などを使用して自分で<table></table>要素を制御した方が 簡単なのでは。 私は、シンプルな表以外はすべてListViewを使用しています。 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 |
|
投稿日時: 2008-07-06 14:33
Access様
ご回答いただき、ありがとうございます。 ListViewやRepeaterは未経験なので食わず嫌いしていたのですが、 これはいけませんね。Table制御が簡単ならこちらを利用することも視野に入れたい と思います。 一応、GridViewに関して悪あがきしてみたのですが、 RowCreatedイベントの中ではなく、DataBind実行後に各行に対してRowSpan設定と新規 行挿入をしてやれば実現したいことが出来るのかな、というところまではわかりました。 (まだ実現はしておりませんが) あるいは、データソースとなるDataTable内で、同じレコードを重複して取ってきて あとはRowSpanだけ設定してやって・・・。うーん、いまいち。 なんとなく、新規行追加の Me.GridView1.Controls(0).Controls.Add(myRow) または Me.GridView1.Controls(0).Controls.AddAt(idx,myRow) の使い方がポイントかなと思います。 同じインデックスにAddAtしようとしても、RowCreatedイベントだとインデックスエラー になって、DataBind後だと予想通りの動きをして。 RowCreated中ではまだGridViewRowコレクションが出来てないからかな・・・。 それにしてもGridViewRowコレクション追加という処理が、なんでこんな書き方に なっているのか、違和感があります。 |
1