- PR -

DataGridで同一列内のセルを結合

1
投稿者投稿内容
こうじ
ベテラン
会議室デビュー日: 2004/02/02
投稿数: 68
お住まい・勤務地: 京都・大阪
投稿日時: 2005-07-22 17:57
いつもお世話になっております。

ASP.NETでDataGridを使い、表を作成しています。
その際、同一列内のセルを結合したく、以下のサイトを参考にしました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/092joincells/joincells.html

例えば、結合する前は以下のような表だったとします。
列3はVisible=Falseとし、画面には表示しないようにします。
______________
 列1 | 列2 | 列3 |
______________
  あ |  い |  う |
______________
  あ |  え |  お |
______________
  か |  き |  く |
______________

列1の結合を行い、以下のような表示に変えたいと思います。
列3は非表示なので、画面上には表示されません。
_________
 列1 | 列2 |
_________
    |  い |
  あ _____
    |  え |
_________
  か |  き |
_________

先ほどのサイトを参考に、上記を試したのですが、
結果としては、以下のようになってしまいました。

_________
 列1 | 列2 |
_________
    |  い |
  あ __________
    |  え |  お |
______________
  か |  き |
_________

【問題】
 2行目の3列目が画面上に表示されてしまいます。
 @ITに掲載されていた関数をそのまま使った場合に上記の結果となったため、ロジックを抜粋し、
 1行目1列目のrowspan=2に設定してから、2行目1列目のセルを削除する処理だけにしても同じ結果になりました。
 また、列2のWidthが列1のWidthと同じ値に変わってしまいました。

 調査したところ、1行目1列目のrowspan=2にした時点で、2行目の3列目が画面に表示されてしまうようです。

 上記を回避する事はできるのでしょうか?

【環境】
 Visual Studio.NET 2002

宜しくお願い致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-22 20:21
削除しないからですよ。

http://www.atmarkit.co.jp/fdotnet/dotnettips/091joinheader/joinheader.html

ちげ〜 列じゃなくて行か。
まぁ、原因は同じ。下のセルを削除してください。

[ メッセージ編集済み 編集者: Jitta 編集日時 2005-07-22 20:23 ]


なんか、まだちげ〜

もう一度「お」のセルの Visible を false に設定しなければならない、かな?セルを削除することで列がずれるので、プロパティが変わったのだと思います。

[ メッセージ編集済み 編集者: Jitta 編集日時 2005-07-22 20:25 ]
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-07-22 20:58
> 1行目1列目のrowspan=2に設定してから、2行目1列目のセルを削除する処理だけにしても同じ結果になりました。

2行目1列目のセルを削除するのではなく、非表示にするとか。
こうじ
ベテラン
会議室デビュー日: 2004/02/02
投稿数: 68
お住まい・勤務地: 京都・大阪
投稿日時: 2005-07-22 21:02
ご返答ありがとうございます。

todoさんの方法で成功しました!ありがとうございます。

また、Jittaさんの方法で、「お」の列を非表示にしてみましたが、非表示になってくれませんでした。
(DataGrid1.Columns(2).Visible = False)

宜しくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-22 22:23
引用:

こうじさんの書き込み (2005-07-22 21:02) より:

また、Jittaさんの方法で、「お」の列を非表示にしてみましたが、非表示になってくれませんでした。
(DataGrid1.Columns(2).Visible = False)

宜しくお願いします。


列?「セル」って書いてないっけ?

> もう一度「お」のセル

「お」の行の、第1列を消すことで、「お」のセルの所属が第2列に変わります。ここで表示になっていると思います。RowSpan の設定は、コレクションには影響を与えず、ブラウザで表示されるときに解釈されるものです。このため、「お」のセルだけ表示されていると思います。
_________________
こうじ
ベテラン
会議室デビュー日: 2004/02/02
投稿数: 68
お住まい・勤務地: 京都・大阪
投稿日時: 2005-07-25 21:40
ご連絡遅くなりました。

すいません、「列」と「セル」を読み違いました
再度、Jittaさんに教えて頂いた方法を試したところ余分な列が上手く消えてくれました。
ただ、最初に記述した「列2のWidthが列1のWidthと同じ値に変わってしまう」状況は改善されませんでした。
もう少し調べてみたいと思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-26 19:50
> 「列2のWidthが列1のWidthと同じ値に変わってしまう」状況は改善されませんでした。
 まず、HTML ソースを確認してみましょう。これも同じじゃないかなぁ?ただ、そうだとすると、面倒なことに各行で width を設定し直さなければならなくなります。

_________________
じーえす風
会議室デビュー日: 2005/07/26
投稿数: 12
投稿日時: 2005-07-26 21:43
うちはVS.NET2003ですが、これで幅もプロパティビルダで設定したままの値になりました。
もしかしてVS.NET2002は動きが違う?

コード:
DataGrid1.Items[0].Cells[0].RowSpan = 2;
DataGrid1.Items[1].Cells[0].Visible = false;

1

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