- ベストアンサー
DataGridのカラムを隠す方法について
- DataGridで任意のカラムをデータはセットしますが、画面上では見えないようにする方法を教えてください。
- 試した方法ではカラムが必ず表示されてしまうため、他の解決策を求めています。
- 環境はFlash8 ProfessionalとWinXPです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
dataProvider でグリッド内で扱うデータを格納している配列変数を定義すると、それだけで列が自動で作られますが、デフォルトでは配列変数に含まれる識別子の数だけ作られるようになっています。 グリッドに表示する識別子を選択するには 1) addColumn メソッドで、表示する識別子を指定して列を作る 2) columnNames プロパティに、表示する識別子の名前を登録する 3) DataGridColumn クラスで列のオブジェクトを作り、addColumn メソッドで追加する といった方法があります。 3) については今回は割愛させていただきます。 詳しくはヘルプの DataGridColumn クラスの項目をご参考になさってください。 ・ Flash ドキュメンテーション: DataGridColumn クラス http://livedocs.macromedia.com/flash/8_jp/main/00003289.html ------------------------------------------------------------------ ステージに DataGrid コンポーネントのインスタンス” OldDG_dg ”があるとします。 ご質問文にある例で、addColumn メソッドを使い氏名コード( nameCode )を表示しないように設定するスクリプトは、大体、次のようになります。 このスクリプトはフレームに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください) //表示する列を定義 //氏名コード(nameCode)は表示しない OldDG_dg.addColumn( "syainName" ); OldDG_dg.addColumn( "C_name" ); //表示データの準備 var Name:String = 'テスト'; var Name_No:String = '1234567'; var OldDG_arry:Array = new Array(); OldDG_arry = [ { syainName : Name , C_name : true , nameCode : Name_No } , { syainName : Name , C_name : false , nameCode : Name_No } ]; OldDG_dg.dataProvider = OldDG_arry; //各列の列幅とヘッダ名を定義 OldDG_dg.getColumnAt( 0 ).headerText = "氏名"; OldDG_dg.getColumnAt( 0 ).width = 70; OldDG_dg.getColumnAt( 1 ).headerText = "チェック"; OldDG_dg.getColumnAt( 1 ).width = 130; columnNames プロパティでも同様のことができます。 上記のスクリプトで、2つの addColumn の代わりに OldDG_dg.columnNames = [ "syainName" , "C_name" ]; としても同じ結果になります。 いずれの場合も dataProvider に配列変数を渡してからだと正常に定義されないことがあるようですので、渡す前に定義する方が安全です。 ********************************** 表示しないように設定した識別子(今回の例では nameCode )で管理されているデータは、単にグリッド内に表示されない、つまり表示するための列が作られないだけの話で、配列変数から削除されるのではありません。 ですから、グリッド内で選択されている行やセルを取得するプロパティ等を利用して参照することも可能です。 この作例は以前別の質問で紹介したことがありますので、よろしければご参考になさってください。 #2で説明しております。 Flash MX 2004 の DataGrid コンポーネントを取り上げていますが、Flash 8 でも同じです。 ・DataGridの項目をクリックしてサイトへリンクさせる方法 http://okwave.jp/qa1916109.html ↑この作例では、shop_list という配列変数に格納されたデータを DataGrid コンポーネントで扱います。 shop_list には shopname (店名)・ place (所在地)・ holiday (定休日)・ hp (ホームページアドレス)という4つの識別子がありますが、columnNames プロパティに hp を除いた3つだけを登録し、ホームページアドレスを非表示にしています。 hp の識別子で管理されているデータは表示されませんが、配列変数内には残っていて、必要な時にいつでも取り出すことができます。 この点を利用して、グリッド内のセルをクリックした時に該当する配列変数の要素にある hp を見てホームページアドレスを取得し、getURL でページを表示させる仕組みにしています。 ところで、列ヘッダのテキストですが。 Flash のテクニカルノートにあるサンプルでは __header という変数を書き換えていますけれど、実はこれは非公開のプロパティ(コンポーネント内部で使われている変数)で、正式には DataGridColumn クラスの headerText というプロパティが公開されています。 まあ、動作上は別に支障がないのでどうでもいいことなのかもしれませんけれど、厳密には一般に公開されている headerText プロパティを書き換えるべきではないかと思います。
お礼
DPE様 回答で教えて頂いたとおりにソースを変更した所、問題が解消されました。 丁寧な解説をしてくださり、本当に勉強になりました。 ありがとうございます!!