ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
フォーラム一覧   -   トピック一覧
   Flex Builder 3
     DataGridの強制スクロールの抑止
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
ito246
投稿日時: 2008-8-26 9:49
ご主人様
登録日: 2007-2-24
居住地:
投稿: 60
Re: DataGridの強制スクロールの抑止
mya様

ご丁寧な解説、本当にありがとうございます。
mya様の方法で、解決できました!

本当にありがとうございます。
今後もよろしくお願いいたします。
mya
投稿日時: 2008-8-26 0:20
一見さん
登録日: 2008-7-20
居住地:
投稿: 2
Re: DataGridの強制スクロールの抑止
refreshボタン押下時の処理内で

 dgTestの垂直方向スクロールポジションを保存

 refresh操作

 dgTestの垂直方向スクロールポジションに,鮴瀋

で実現したいことが、実現できますか?
については、自由にスクロール位置を設定出来るので、ご自身で設定したいスクロールポジションを設定してもらっても結構だと思います。

//一行削除後にリフレッシュで描画を更新
private function funRefresh():void{
//
var vScrollPostion:Number = dgTest.verticalScrollPosition;

//一行削除
arcTest.removeItemAt(10);
//リフレッシュ
arcTest.refresh();

//
dgTest.verticalScrollPosition = vScrollPostion;
}
ito246
投稿日時: 2008-8-25 19:14
ご主人様
登録日: 2007-2-24
居住地:
投稿: 60
Re: DataGridの強制スクロールの抑止
goki様
いつもお世話になっております。

まず、ここに掲載したプログラムではなく、
別のプログラムでDataGridの強制スクロールの問題が
発生しています。
(問題の状況をわかってもらいたくて簡単なプログラムを
書きました。混乱させて申し訳ありません。)


refreshが必要な理由は、

私が今、開発中のプログラムで、
dataprovider に指定しているArrayCollectionが
static変数だからです。

staticでは、[Bindable]に設定できないため、
refreshを使ってレコードを更新してから、
DataGridのdataproviderに渡しています。

refreshを使うと、
DataGrid上でクリックして選択されていた行が、
DataGridのトップに表示され、
クリックしたいた行の上段以降が見えなくなって
しまい困っています。(強制スクロール)

うまく、説明できているか不安ですが、
ご教授よろしくお願いします。

goki
投稿日時: 2008-8-25 17:33
ご主人様
登録日: 2007-8-27
居住地: おかのよこはま
投稿: 735
Re: DataGridの強制スクロールの抑止
引用:
arcTestを[Bindable]にすれば、
refreshがいらないことがわかったのですが


以外の理由が

引用:
どうしてもrefreshの処理が必要です。

にあるのでしょうか?
ito246
投稿日時: 2008-8-25 15:55
ご主人様
登録日: 2007-2-24
居住地:
投稿: 60
Re: DataGridの強制スクロールの抑止
追伸

arcTestを[Bindable]にすれば、
refreshがいらないことがわかったのですが、、、

どうしてもrefreshの処理が必要です。
わがままを言って申し訳ないですが、よろしくお願いします。

ito246
投稿日時: 2008-8-25 15:45
ご主人様
登録日: 2007-2-24
居住地:
投稿: 60
DataGridの強制スクロールの抑止
初歩的な質問で大変申し訳ありません。
どうしてもわからないので、教えてください。

以下のようなプログラムがあります。


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.collections.ArrayCollection;
			
			private var arcTest:ArrayCollection = new ArrayCollection();
			
			//dataProviderをセット			
			private function funSet():void{
				arcTest.addItem({col1:1,col2:234,col3:345});
				arcTest.addItem({col1:2,col2:234,col3:345});
				arcTest.addItem({col1:3,col2:234,col3:345});
				arcTest.addItem({col1:4,col2:234,col3:345});
				arcTest.addItem({col1:5,col2:234,col3:345});
				arcTest.addItem({col1:6,col2:234,col3:345});
				arcTest.addItem({col1:7,col2:234,col3:345});
				arcTest.addItem({col1:8,col2:234,col3:345});
				arcTest.addItem({col1:9,col2:234,col3:345});
				arcTest.addItem({col1:10,col2:234,col3:345});
				arcTest.addItem({col1:11,col2:234,col3:345});
				arcTest.addItem({col1:12,col2:234,col3:345});
				arcTest.addItem({col1:13,col2:234,col3:345});
				arcTest.addItem({col1:14,col2:234,col3:345});

				dgTest.dataProvider = arcTest;
			}
			
			//一行削除後にリフレッシュで描画を更新
			private function funRefresh():void{		
				//一行削除
				arcTest.removeItemAt(10);				
				//リフレッシュ
				arcTest.refresh();
			}

		]]>
	</mx:Script>
	
	<mx:DataGrid id="dgTest" x="50" y="43">
		<mx:columns>
			<mx:DataGridColumn headerText="列 1" dataField="col1"/>
			<mx:DataGridColumn headerText="列 2" dataField="col2"/>
			<mx:DataGridColumn headerText="列 3" dataField="col3"/>
		</mx:columns>
	</mx:DataGrid>
	<mx:Button x="369" y="69" label="ボタン" click = "funSet()"/>
	<mx:Button x="369" y="112" label="refresh" click = "funRefresh()"/>
	
</mx:Application>



DataGridの行を選択した状態で、refreshをかけると、
選択した行がDataGridの先頭行へと
強制スクロールされてしまいます。

たとえば、
1行目から10行目まで画面にレコードが
表示されているとして、

 。換毀椶鬟リックで選択
◆refresh を実行

すると、画面に表示されるのは、
4行目以降になってしまいます。


scrollToIndexや、isItemVisibleを使用すれば、
解決できそうなのですが、isItemVisibleの使用方法が
わかりません。

そもそも、isItemVisibleを使うという考えが、
既に間違えているのでしょうか?

ちなみに、
selectable = falseとして解決できるのですが、
レコードを選択して処理をする部分があるので、
これ以外の解決方法を教えていただけないでしょうか?
どなたかご教授お願いします。

スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を