- PR -

DataGridのカラム結合

1
投稿者投稿内容
damepg
大ベテラン
会議室デビュー日: 2003/03/19
投稿数: 229
お住まい・勤務地: 東京都内
投稿日時: 2003-05-19 12:21
DataGridで
HTMLで言う、colspan="2"などのようなカラムの結合をしたいのですが
どうしたら出来ますか?
よきアドバイスをお願いします。
キョウ
常連さん
会議室デビュー日: 2003/04/30
投稿数: 49
投稿日時: 2003-05-19 14:54
同様の件で私も悩みました。

「DataGridで1レコードを複数行で表示したい」

↑スレッドで回答して頂きましたので、ご参考にされては
いかがでしょうか?
せんべい
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 61
お住まい・勤務地: 神奈川県川崎市
投稿日時: 2003-05-19 17:12
せんべいです

 なんかややこしいことされてますが・・・
 私は以下のようにしています。

たとえば、
---------------------
| @ | A | B | C |
---------------------
と、四つのセルからなる表(DataGrid)があったとします。
このセルの、@とAに同じデータが(Text)入っているので
これを連結して一つのセルにしたい!とします。そんなとき
どうするのか?私はこうします。

1.そのままDataSourceをくっつけて、DataBind()する。
2.セルを一つ一つ見て、同じデータがあるかどうか見ていきます。
3.上の例で@とAが同じで、Bが違うてきすとの場合、A.Remove()として・・・
4.@.ColumnSpan = 2とする。

ってな感じです。もちろん、Bまで同じTextならば、BもRemove()して
@.ColumnSpan = 3とするわけです。

表が大きくなったら、それだけ処理がいるので、遅くなるんですけどね。

ではでは・・・

[ メッセージ編集済み 編集者: せんべい 編集日時 2003-05-19 17:13 ]
damepg
大ベテラン
会議室デビュー日: 2003/03/19
投稿数: 229
お住まい・勤務地: 東京都内
投稿日時: 2003-05-19 18:51
下記の様にしたのですが、余分なセル(ヘッダーセルの2〜7番目)が削除されません。
ColSpanは出来ているようです。
Removeというメソッドはないようなので、プロパティのEnabledを使用しましたが
余分なセルは削除できませんでした。
何が悪いのでしょうか?ご指摘お願いします。

Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound

If e.Item.ItemType = ListItemType.Header Then

e.Item.Cells(1).ColumnSpan = 7
e.Item.Cells(2).Enabled = True
e.Item.Cells(3).Enabled = True
e.Item.Cells(4).Enabled = True
e.Item.Cells(5).Enabled = True
e.Item.Cells(6).Enabled = True
e.Item.Cells(7).Enabled = True

End If

end Sub

引用:

せんべいさんの書き込み (2003-05-19 17:12) より:
せんべいです

 なんかややこしいことされてますが・・・
 私は以下のようにしています。

たとえば、
---------------------
| @ | A | B | C |
---------------------
と、四つのセルからなる表(DataGrid)があったとします。
このセルの、@とAに同じデータが(Text)入っているので
これを連結して一つのセルにしたい!とします。そんなとき
どうするのか?私はこうします。

1.そのままDataSourceをくっつけて、DataBind()する。
2.セルを一つ一つ見て、同じデータがあるかどうか見ていきます。
3.上の例で@とAが同じで、Bが違うてきすとの場合、A.Remove()として・・・
4.@.ColumnSpan = 2とする。

ってな感じです。もちろん、Bまで同じTextならば、BもRemove()して
@.ColumnSpan = 3とするわけです。

表が大きくなったら、それだけ処理がいるので、遅くなるんですけどね。

ではでは・・・

[ メッセージ編集済み 編集者: せんべい 編集日時 2003-05-19 17:13 ]

せんべい
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 61
お住まい・勤務地: 神奈川県川崎市
投稿日時: 2003-05-20 09:37
せんべいです

 すみません。間違えていました。
 消すのは、Remove()ではなくてRemoveAt(i)でした。(iはカラム番号)
 しかも、DataGridItemオブジェクトのCellsプロパティで
 TableCellCollectionオブジェクトを取得し、そのTableCellCollectionオブジェクト
 のRemoveAt(i)メソッドです。ですから、昨日の順番と内容は変わって、

1.そのままDataSourceをくっつけて、DataBind()する。
2.セルを一つ一つ見て、同じデータがあるかどうか見ていきます。
3.上の例で@とAが同じで、Bが違うてきすとの場合、
  (@ABのある行のDataGridItemオブジェクト).Cells.RemoveAt(1)として・・・
4.@.ColumnSpan = 2とする。

 ですね。ごめんなさい。
 一回試してみてください。



[ メッセージ編集済み 編集者: せんべい 編集日時 2003-05-20 09:41 ]

[ メッセージ編集済み 編集者: せんべい 編集日時 2003-05-20 09:42 ]
damepg
大ベテラン
会議室デビュー日: 2003/03/19
投稿数: 229
お住まい・勤務地: 東京都内
投稿日時: 2003-05-20 10:57
下記の方法で解決できました。
ありがとうございました。
本当に助かりました。

Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound

If e.Item.ItemType = ListItemType.Header Then

e.Item.Cells.RemoveAt(2)
e.Item.Cells.RemoveAt(2)
e.Item.Cells.RemoveAt(2)
e.Item.Cells.RemoveAt(2)
e.Item.Cells.RemoveAt(2)
e.Item.Cells.RemoveAt(2)
e.Item.Cells(1).ColumnSpan = 7

e.Item.Cells(1).Text = "<TABLE cellpadding=0 cellspacing=0 width=322px border=1><TR><TD align=center colspan=7>Daily Report</TD></TR><TR><TD align=center>1</TD><TD align=center>2</TD><TD align=center>3</TD><TD align=center>4</TD><TD align=center>5</TD><TD align=center>6</TD><TD align=center>7</TD></TR></TABLE>"

End If

End Sub

引用:

せんべいさんの書き込み (2003-05-20 09:37) より:
せんべいです

 すみません。間違えていました。
 消すのは、Remove()ではなくてRemoveAt(i)でした。(iはカラム番号)
 しかも、DataGridItemオブジェクトのCellsプロパティで
 TableCellCollectionオブジェクトを取得し、そのTableCellCollectionオブジェクト
 のRemoveAt(i)メソッドです。ですから、昨日の順番と内容は変わって、

1.そのままDataSourceをくっつけて、DataBind()する。
2.セルを一つ一つ見て、同じデータがあるかどうか見ていきます。
3.上の例で@とAが同じで、Bが違うてきすとの場合、
  (@ABのある行のDataGridItemオブジェクト).Cells.RemoveAt(1)として・・・
4.@.ColumnSpan = 2とする。

 ですね。ごめんなさい。
 一回試してみてください。



[ メッセージ編集済み 編集者: せんべい 編集日時 2003-05-20 09:41 ]

[ メッセージ編集済み 編集者: せんべい 編集日時 2003-05-20 09:42 ]

1

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