- PR -

【ASP.NET】列に特定文字列が含まれている場合その列を削除するには

1
投稿者投稿内容
M&B
会議室デビュー日: 2006/11/07
投稿数: 6
投稿日時: 2006-11-07 14:13
いつも参考にさせていただいています。
現在、ASP.NETで開発をしております。

データによって列数が変動する表示方法をとっています。

ファイルメーカーから出力されるXMLでカラム数を変化させる
事はできないのでASP側の表示で変化させています。

*************************
 1 2 3 4 5 6
|○|□|□|○| | |
|□|△|□|□| | |
|○|○|△|○| | |
*************************

         ↑5と6を下記の方法で削除していました

上記の様にカラムはあるがデータが無い場合に今までは

MyGrid.AutoGenerateColumns = true;
for (int c = 6; c > 5; c--) {
MyGrid.Columns[c].Visible = false;}

の様な方法で列数を削除していたのですが

http://www.atmarkit.co.jp/fdotnet/dotnettips/092joincells/joincells.html

の同一列内のセルを結合を実行すると行あたりの列数が変化してしまい
上記の方法で列を削除すると結合された行は列が1つ少ないとみなされ
表が崩れてしまいます。

そこでファイルメーカーの方で削除したい空欄の部分に特定の文字列を挿入して
特定の文字列がある列は削除という方法がとれないかと思い質問させて頂きました。

*************************
 1 2 3 4 5 6
|○|□|□|○|消|消|
|□|△| |□|消|消|
|○|○| |○|消|消|
*************************

の様に「消」で埋まっている列を削除したいのです。

C#で作っているのですがこの様な方法は可能なのでしょうか?
また上記の様な列を結合した場合でも表が崩れない方法が
あるのであればお教えしていただきたいと思います。

以上よろしくお願いします。


THREE-ONE
常連さん
会議室デビュー日: 2006/08/17
投稿数: 36
投稿日時: 2006-11-07 22:43
こんばんは、THREE-ONEです

行を消した後に、セルを結合しても無理でしょうか?

"消"が入っているセルを非表示にしてもできると思います。
ヘッダ・フッタがあるならばもう少し工夫が必要かもしれませんが。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-11-08 08:56
回答そのものではないのですが。

引用:

M&Bさんの書き込み (2006-11-07 14:13) より:

そこでファイルメーカーの方で削除したい空欄の部分に特定の文字列を挿入して
特定の文字列がある列は削除という方法がとれないかと思い質問させて頂きました。


このような方法をとるのであれば、ご自身で配列やダミーGridコントロールなりに一旦データを取り込み、そこから有効な列のみをMyGridに出力するといった処理を自作された方が宜しいのではないでしょうか?
_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-11-08 12:36
引用:

M&Bさんの書き込み (2006-11-07 14:13) より:
http://www.atmarkit.co.jp/fdotnet/dotnettips/092joincells/joincells.html

の同一列内のセルを結合を実行すると行あたりの列数が変化してしまい



セルを削除するのではなく非表示にするとか。
M&B
会議室デビュー日: 2006/11/07
投稿数: 6
投稿日時: 2006-11-08 15:29
THREE-ONE様
R・田中一郎様
todo様
ご返信ありがとうございます。

>THREE-ONE様
>行を消した後に、セルを結合しても無理でしょうか?
と言うのは特定の文字列でセルを削除させる事が可能なのでしょうか?

>R・田中一郎様
有効な列のみをMyGridに出力するというのは勉強不足でして
ASP内で手書きでカラム名を指定する方法であれば出来るのですが
自動にする方法が可能なのでしょうか?

>todo様
>セルを削除するのではなく非表示にするとか。
非表示にしたらセルの枠は表示されないのでしょうか?

前回の説明が分かりにくかったかもしれませんのでもう一度書きますと

*************************
|1|2|3|4|5|6|
|○|□|□|○|消|消|
|□|△| |□|消|消|←3番の列が結合されてる為5列として認識される。
|○|○| |○|消|消|
*************************
     ↓
*************************
|1|2|3|4|
|○|□|□|○|
|□|△| |□|
|○|○| |○|
*************************

の様なスタイルに変えたいのです。
5番と6番の列にはデータが空のカラムになっているか特定の文字列で
フラグを立てればいいのかと思ったのです。
色々調べても特定の文字列で列を削除というものが見つからず悩んでいます。

この列の結合の前はそれぞれの行の列数が取得できていたので
6行から5行を列の削除が指定できていたのですが列数が崩れてしまう為
その処理が出来なくなりました。

THREE-ONE
常連さん
会議室デビュー日: 2006/08/17
投稿数: 36
投稿日時: 2006-11-09 00:50
引用:
>THREE-ONE様
>行を消した後に、セルを結合しても無理でしょうか?
と言うのは特定の文字列でセルを削除させる事が可能なのでしょうか?


できますよ、そのようにコードを書けば。
たとえば ItemDataBound イベントでセルの値が削除対象文字列だった場合、Visible = false にするとか。
で、その後にセル結合なので、セル結合は PreRender イベントで行うとか。

引用:
*************************
|1|2|3|4|5|6|
|○|□|□|○|消|消|
|□|△| |□|消|消|←3番の列が結合されてる為5列として認識される。
|○|○| |○|消|消|
*************************


これはセル結合、具体的に言うと RowSpan = 2 をどこかで指定した後に消そうとしているからです。

|1|2|3|4|5|6|
|○|□|□|○|消|消|
|□|△|空|□|消|消|
|○|○|空|○|消|消|
の状態で5、6を消してから空のセルを結合するということはできないのでしょうか?
M&B
会議室デビュー日: 2006/11/07
投稿数: 6
投稿日時: 2006-11-09 10:41
THREE-ONE様

返信ありがとうございます。

色々試した所、特定の文字列でセルの色を変えるを少しいじって
特定の文字列の入っているセルを削除することが出来ました。

色々とアドバイスをいただきありがとうございました。
1

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