ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
フォーラム一覧   -   トピック一覧
   超ビギナー
     CheckBox付きのDataGridのデータがはみ出してしまう
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
saeko
投稿日時: 2008-7-17 12:38
常連さん
登録日: 2008-6-19
居住地:
投稿: 37
CheckBox付きのDataGridのデータがはみ出してしまう
こんにちは。

不思議な現象が起きているので質問させてください。

チェックボックス単品を作成し、これをDataGridの一列目にitemRendererで指定しています。
また、水平スクロールバーはオフにしています。

DataGridにデータを表示させ、垂直スクロールさせると、
一番下の行が常にDataGridの枠からはみ出して表示されています。

こんな現象が起こった方いますか?
goki
投稿日時: 2008-7-17 16:46
ご主人様
登録日: 2007-8-27
居住地: おかのよこはま
投稿: 735
Re: CheckBox付きのDataGridのデータがはみ出してしまう
以前投稿した、variableRowHeightsの件かなと思ってこういうサンプルを作成しましたが
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
    creationComplete="init()">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            private function init():void {
                var ac:ArrayCollection = new ArrayCollection();
                for (var i:int = 0; i < 100; i++) {
                    var obj:Object = new Object();
                    obj.col1 = Math.random() * 2 > 1;
                    obj.col2 = "hogehoge" + i;
                    obj.col3 = "ああああ" + i;
                    for (var j:int = 0; j < Math.random() * 4; j++) {
                        obj.col3 += "\nああああ" + j; 
                    }
                    ac.addItem(obj);
                }
                dg1.dataProvider = ac;
            }
        ]]>
    </mx:Script>
    <mx:DataGrid x="10" y="10" id="dg1"
        variableRowHeight="true" height="144">
        <mx:columns>
            <mx:DataGridColumn headerText="列 1" dataField="col1" editorDataField="selected" rendererIsEditor="true">
                <mx:itemRenderer>
                    <mx:Component>
                        <mx:CheckBox change="data.col1 = selected"/>
                    </mx:Component>
                </mx:itemRenderer>
            </mx:DataGridColumn>
            <mx:DataGridColumn headerText="列 2" dataField="col2" wordWrap="true"/>
            <mx:DataGridColumn headerText="列 3" dataField="col3"/>
        </mx:columns>
    </mx:DataGrid>
    
</mx:Application>

再現しないですね。(Flex 2.0.1 + Hotfix3で確認)
yasukawa
投稿日時: 2008-7-17 16:47
やや お馴染みさん
登録日: 2008-5-27
居住地:
投稿: 8
Re: CheckBox付きのDataGridのデータがはみ出してしまう
確かFlexSDKの不具合が、以前のバージョンにあったような記憶がありますが、
http://bugs.adobe.com/jira
で、検索してみれば、該当するものがあるかもしれません

どのバージョンですか?Hotfixをあてる、Flex3では修正済みかも...
saeko
投稿日時: 2008-7-17 18:00
常連さん
登録日: 2008-6-19
居住地:
投稿: 37
Re: CheckBox付きのDataGridのデータがはみ出してしまう
yasukawaさん、gokiさん

お返事ありがとうございます。
Flex2.0.1を使用しています。
また、checkboxは、画面とは別にcheckbox単品の
mxmlファイルを作成して、これをitemRendererにしています。

HotFixをあてる、とはどういうことでしょうか?
Flexのバグなのでしょうか?
yasukawaさんが掲示されたアドレスで調べてみます(TT)
gokiさんも、サンプルまで作成して試していただきて
ありがとうございます。
yasukawa
投稿日時: 2008-7-17 18:06
やや お馴染みさん
登録日: 2008-5-27
居住地:
投稿: 8
Re: CheckBox付きのDataGridのデータがはみ出してしまう
Flex 2.0.1 のHotfixについては、次のドキュメントが参考になるかと...
http://www.adobe.com/jp/support/flex/ts/documents/kb402381.htm
saeko
投稿日時: 2008-7-17 18:55
常連さん
登録日: 2008-6-19
居住地:
投稿: 37
Re: CheckBox付きのDataGridのデータがはみ出してしまう
yasukawaさん

ありがとうございます。
hotfix2,3をどちらも当てたのですが
今までコンパイルエラーになっていなかった宣言が
コンパイルエラーになってしまいました(TT)

1172: 定義 mx.rpc.xml:ElementDecl が見つかりません。

これが通らないみたいです。
それから、やっぱりデータグリッドのバグは直りません。
水平バーを出したら、はみださないのになあ・・。
yasukawa
投稿日時: 2008-7-17 22:04
やや お馴染みさん
登録日: 2008-5-27
居住地:
投稿: 8
Re: CheckBox付きのDataGridのデータがはみ出してしまう
CheckBox付きのDataGridの再現ケースを置いていただくことは、可能でしょうか?
saeko
投稿日時: 2008-7-18 14:26
常連さん
登録日: 2008-6-19
居住地:
投稿: 37
Re: CheckBox付きのDataGridのデータがはみ出してしまう
itemRenderer01.mxml

<?xml version="1.0" encoding="utf-8"?>
 <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="34" height="18"
   implements="mx.controls.listClasses.IDropInListItemRenderer" horizontalAlign="center" 
   mouseDown=";"> 

 <mx:Script> 
   <![CDATA[
   import mx.controls.listClasses.BaseListData;
   import mx.controls.dataGridClasses.DataGridListData;
	
   private var _listData:DataGridListData;

   public function get listData():BaseListData
   {
      return _listData;
   }
	public function set listData(value:BaseListData):void
 	{
    	_listData = value as DataGridListData;
    	cb.listData = value;
 	}
 	override public function set data(value:Object):void
 	{
    	super.data = value;
    	if (value && _listData.dataField)
    	{
       		cb.selected = value[_listData.dataField] == '1';
    	}
    	else
       		cb.selected = false;
 	}
	
   private function chkchange():void
   {
      if (data && _listData.dataField)
         data[_listData.dataField] = cb.selected ? '1' : '0'
   }

   ]]>
 </mx:Script> 

  <mx:CheckBox  id="cb" width="16" height="18" change="chkchange()"/>
 </mx:HBox>



main.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="794" height="676" 
	 horizontalScrollPolicy="off" xmlns:control="control.*" verticalScrollPolicy="off"  xmlns:ns2="form.*" borderStyle="none" alpha="1.0"
	   >
      
		<mx:Script>
		<![CDATA[
			import mx.collections.XMLListCollection;
			import mx.controls.Alert;
			
			/** 表示用XML */
			[Bindable]
				private var xmldata:XML =

					<root>
						<List data="1">
							<i_select>1</i_select>
							<i_filename>12345</i_filename>
							<i_name>aaa</i_name>
						</List> 
						<List data="2">
							<i_select>1</i_select>
							<i_filename>45678</i_filename>
							<i_name>aaa</i_name>
						</List> 
						<List data="3">
							<i_select>0</i_select>
							<i_filename>5632</i_filename>
							<i_name>aaa</i_name>
						</List> 
						<List data="4">
							<i_select>0</i_select>
							<i_filename>12345</i_filename>
							<i_name>aaa</i_name>
						</List> 
						<List data="5">
							<i_select>0</i_select>
							<i_filename>5555</i_filename>
							<i_name>aaa</i_name>
						</List> 
						<List data="6">
							<i_select>0</i_select>
							<i_filename>6666</i_filename>
							<i_name>aaa</i_name>
						</List> 
						:
						:	データを数十件作成

					</root>;			
			[Bindable]
				public var list:XMLListCollection = new XMLListCollection(xmldata.List);
			
			/**
			 * データグリッドの行番号表示
			 */
			private function lfRowNum(oItem:Object,clmn:DataGridColumn):String
			{
				var iIndex:int = dataGrid.dataProvider.getItemIndex(oItem) + 1;
				return String(iIndex);
			}

		]]>
	</mx:Script> 
	<mx:Panel id="pnlMain" width="772" height="532" layout="absolute" cornerRadius="20" backgroundColor="#ffffff"  horizontalScrollPolicy="off" verticalScrollPolicy="off"
	 backgroundAlpha="0.26" borderColor="#ffffff" borderAlpha="0.26" roundedBottomCorners="true" y="0" x="10" borderThicknessTop="-20">
	<mx:DataGrid x="0" y="193"  height="311"  horizontalScrollPolicy="auto" verticalScrollPolicy="auto" 
		rollOverColor="#AADEFF" selectionColor="#7FCDFE" id = "dataGrid" allowMultipleSelection="true"  width="752">
		<mx:columns>
			<mx:DataGridColumn headerText="チェック" dataField="i_select" width="35" itemRenderer="form.renderItem01" textAlign="center"/>
			<mx:DataGridColumn headerText="NO" labelFunction="lfRowNum" width="35" />
			<mx:DataGridColumn headerText="ファイル名" dataField="i_filename" width="60"/>
			<mx:DataGridColumn headerText="名称" dataField="i_name" width="75"/>
		</mx:columns>
	</mx:DataGrid>
	
	</mx:Panel>
</mx:Canvas>




上記のような感じで、チェックitemRendererを使用しました。
最終行がはみ出してしまいます(TT)
mya
投稿日時: 2008-7-20 3:08
一見さん
登録日: 2008-7-20
居住地:
投稿: 2
Re: CheckBox付きのDataGridのデータがはみ出してしまう
確かに最下行の表示がDataGridの枠からはみだして表示されていますね。

私の個人的な見解では、上記ソースでは13行表示ですが、DataGrid側からは14行表示と認識されているようです。
詳しい原因は私には、回答できません。。ごめんなさい。

回避方法としては、DataGridのheightプロパティにて
height="311" → height="310"とし表示行を13行にきちんと合わせることで回避可能です。
rowCountを取得すると14となっているので、13にするために上記回避をいれました。
(14行目が1ピクセルでも表示されれいる場合は、rowCountにカウントされる)
saeko
投稿日時: 2008-7-21 14:23
常連さん
登録日: 2008-6-19
居住地:
投稿: 37
Re: CheckBox付きのDataGridのデータがはみ出してしまう
myaさん

 返信ありがとうございます!!
解決できました。
高さをきっちり設定する必要があるようですね。

ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を