トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   とにかくFLASH【FLASHに関して全般】
     DataGrid内 のチェックボックス等のインスタンスに直接のアクセス
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
関たかまさ
Åê¹ÆNo.12664
投稿日時: 2004-11-25 10:11
常連
居住地: 埼玉
投稿: 61
使用環境:
WinXP Pro(sp1)
FlashMX 2004 Pro 7.2
Re: DataGrid内 のチェックボックス等のインスタンスに直接のアクセス
こんにちわ。

解決できてよかったです
OresamaX
Åê¹ÆNo.12646
投稿日時: 2004-11-24 20:17
新米
居住地: 東京
投稿: 27
使用環境:
OS = Win2000,WindowsXP SP2,MacOSX
Publish = Flash MX 2004 Professional
browser = IE6.0, Firefox1.5, Opera8.5, Safari
FlashPlayer = 7.0, 8.0
Re: DataGrid内 のチェックボックス等のインスタンスに直接のアクセス
解決いたしました。

【解決の方法】
>> セルレンダラ外で <<
1.データグリッド内に、checkbox.selected の状態を示す、
  with=0, name="selected" の列を作成する
2.dataProvider.editField(indexItem,"selected",true)、又は
  dataProvider.editField(indexItem,"selected",false)、で
  目的の行のチェックボックスの状態を変更
>> セルレンダラ内で <<
3.setValue() では、
  var myIndex = getCellIndex().itemIndex;
  checkbox.selected = listOwner.getItemAt( myIndex ).selected;
とし、checkbox の状態を変更

これによって、自在に状態変更を行えるようになりました。
欠点は、非表示の列が増えることですが。。。

やはり、先述のような問題を抱えている場合、
処理を間接的に操作する方法を考えるしかない。

つまり、
1.上記のようにインスタンスに連動する非表示の列を作り、
2.それをdataProvider.editField()によって操作し、
3.setValue() で インスタンスに連動する非表示の列の値を
  インスタンスのプロパティにセットする

という結論に至りました。

なんかややこしいけど、すっきりしたと思います!
困ったときの文殊の知恵!ありがとうございました!

取り急ぎ、ソースコードなしの報告です。
そのうちサンプルでも作って追加記載します!
OresamaX
Åê¹ÆNo.12644
投稿日時: 2004-11-24 19:10
新米
居住地: 東京
投稿: 27
使用環境:
OS = Win2000,WindowsXP SP2,MacOSX
Publish = Flash MX 2004 Professional
browser = IE6.0, Firefox1.5, Opera8.5, Safari
FlashPlayer = 7.0, 8.0
Re: DataGrid内 のチェックボックス等のインスタンスに直接のアクセス
おせわになります。

引用:

例)配置側に二次元配列を作った場合
<配置側>
_level0["extraCellData"] = new Array();
...以下データセット

<renderer側>
setValueメソッドの中で・・・

var col = Number(getCellIndex().columnIndex);
var row = Number(getCellIndex().itemIndex);
var obj = listOwner.extraCellData[row][nam];

if(obj.selected == false)...



なるほど!と思いました。
その線で、いい案を思いつきました!

早速いまから対応してみます。
対応結果をまたこちらへ報告させていただきます。

ありがとうございます!
関たかまさ
Åê¹ÆNo.12642
投稿日時: 2004-11-24 18:58
常連
居住地: 埼玉
投稿: 61
使用環境:
WinXP Pro(sp1)
FlashMX 2004 Pro 7.2
Re: DataGrid内 のチェックボックス等のインスタンスに直接のアクセス
ちょっと乱暴なつくりになってしまいますが、コンポーネント配置側・もしくはcellRendererのクラスとかに配列(とか)を作ってそれを参照して動作を変更できますよね。
私はそれで逃げました(笑)

例)配置側に二次元配列を作った場合
<配置側>
_level0["extraCellData"] = new Array();
...以下データセット

<renderer側>
setValueメソッドの中で・・・

var col = Number(getCellIndex().columnIndex);
var row = Number(getCellIndex().itemIndex);
var obj = listOwner.extraCellData[row][nam];

if(obj.selected == false)...

みたいな雰囲気です。
OresamaX
Åê¹ÆNo.12640
投稿日時: 2004-11-24 18:36
新米
居住地: 東京
投稿: 27
使用環境:
OS = Win2000,WindowsXP SP2,MacOSX
Publish = Flash MX 2004 Professional
browser = IE6.0, Firefox1.5, Opera8.5, Safari
FlashPlayer = 7.0, 8.0
Re: DataGrid内 のチェックボックス等のインスタンスに直接のアクセス
早速ありがとうございます。

引用:

cellrendereの作り方にもよりますが、単純に変更したいセルに当たる値を変更すれば思い通りになりませんか?

setValueで処理されてると思いますので、
グリッド.dataProvider.editField()
で変更したらよいと思います


そうなんです。詳細を記載してなくて恐縮です。。。

dataProvider.editField() による変更が反映されるのは、
setValue() での処理で、以下のように指定できる場合ですよね。

例1) textArea.text = item.description;
例2) checkbox.selected = (item.description > 0);
    checkbox._visibible = (item.description > 0);

しかし、チェックボックスなど、.label と .selected のように
二つ以上のプロパティを個別に指定したい場合、

.label または .selected のどちらかを item.description に
割り当ててしまうと、残されたものが変更できなくなるんです。

このような場合は、どうしたらいいでしょうか。
未熟なもので、いい案が浮かばないのです。

なにかデリミタ(例えば'%%'など)で2つ以上の情報を入れて、
setValue() 内の処理で split() するしかないでしょうか。


関たかまさ
Åê¹ÆNo.12637
投稿日時: 2004-11-24 17:57
常連
居住地: 埼玉
投稿: 61
使用環境:
WinXP Pro(sp1)
FlashMX 2004 Pro 7.2
Re: DataGrid内 のチェックボックス等のインスタンスに直接のアクセス
こんにちわ。

cellrendereの作り方にもよりますが、単純に変更したいセルに当たる値を変更すれば思い通りになりませんか?

setValueで処理されてると思いますので、
グリッド.dataProvider.editField()
で変更したらよいと思います
OresamaX
Åê¹ÆNo.12636
投稿日時: 2004-11-24 17:39
新米
居住地: 東京
投稿: 27
使用環境:
OS = Win2000,WindowsXP SP2,MacOSX
Publish = Flash MX 2004 Professional
browser = IE6.0, Firefox1.5, Opera8.5, Safari
FlashPlayer = 7.0, 8.0
DataGrid内 のチェックボックス等のインスタンスに直接のアクセス
お世話になります。

データグリッドについて、色々と読ませてもらいました。
上記の件についても参考になる内容が多々あったのですが、
他の内容の検討結果だったのと、結末がよくわからなかったので、
質問させてもらいます。

===================================

【データグリッドの状態】
データグリッドへセルレンダラを指定し、
チェックボックス等を作成し、表示させている

【目標】
例)チェックボックスの場合
任意のチェックボックスの選択・非選択に応じ、
他の行や列のチェックボックスの選択・非選択を変更したい

【問題】
セルへ配置されているチェックボックスへ直接アクセスし、
その選択状態を変更するために・・・・

【考えられる解決方法】
(1)
grid.rows[indexRow].cells[indexCell].インスタンス名
といった形で直接アクセスする

(2)
DataGrid.as の改造利用

【結論】
(1)の解決方法では、
indexRow が、getItemAt(indexItem)のindexItem と等しくない
  ↓
indexRow を何らかの方法で算出し、アクセスするしかないか?

(2)の解決方法では、
手間を考えると、リッドチックなものを自作したほうがよい

>>> ここで思考停止・・・ <<<

===================================

記事を色々と拝見しておりますと、
皆様も上記のような経験をされているようなので、
この問題に何らかの結論をつけたく、
上記のような題名で投稿させていただきました。

結果的に私は、グリッド自作の道を選んでしまったのですが。


他に何かよい手法をご存知でしょうか。
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops