先看图片:
因为项目中需要用到datagrid,而且需要在其中嵌入dropdownlist,包括header和item。
一开始嵌入的是Combobox,但是发现用Combobox的话,稍微动一个datagrid,如改变大小等,Combobox里的数据立刻不见了,所以使用dropdownlist控件,反正是Flex4.1。
废话完毕,上代码:
for datagrid:
代码
<
mx:DataGrid id
=
"
dgList
"
width
=
"
100%
"
height
=
"
100%
"
dataTipFunction
=
"
buildToolTip
"
variableRowHeight
=
"
true
"
sortableColumns
=
"
false
"
visible
=
"
false
"
>
<
mx:columns
>
<
mx:DataGridColumn headerText
=
"
chkSave
"
visible
=
"
false
"
>
<
mx:itemRenderer
>
<
fx:Component
>
<
mx:CheckBox selected
=
"
{data.chkSave}
"
/>
</
fx:Component
>
</
mx:itemRenderer
>
</
mx:DataGridColumn
>
<
mx:DataGridColumn headerText
=
"
chkDel
"
visible
=
"
false
"
>
<
mx:itemRenderer
>
<
fx:Component
>
<
mx:CheckBox selected
=
"
{data.chkDel}
"
/>
</
fx:Component
>
</
mx:itemRenderer
>
</
mx:DataGridColumn
>
<
mx:DataGridColumn dataField
=
"
Xbrl
"
headerText
=
"
XBRL
"
itemRenderer
=
"
cons.com.epro.child.myCombox
"
/>
<
mx:DataGridColumn headerText
=
"
Column1
"
dataField
=
"
Column1
"
width
=
"
200
"
showDataTips
=
"
true
"
/>
<
mx:DataGridColumn headerText
=
"
NOTE
"
dataField
=
"
NOTE
"
width
=
"
50
"
/>
<
mx:DataGridColumn headerText
=
"
Column2
"
dataField
=
"
Column2
"
width
=
"
90
"
wordWrap
=
"
true
"
headerRenderer
=
"
cons.com.epro.child.myComboxHeader
"
/>
<
mx:DataGridColumn headerText
=
"
Column3
"
dataField
=
"
Column3
"
width
=
"
90
"
wordWrap
=
"
true
"
headerRenderer
=
"
cons.com.epro.child.myComboxHeader
"
/>
<
mx:DataGridColumn headerText
=
"
Column4
"
dataField
=
"
Column4
"
width
=
"
90
"
wordWrap
=
"
true
"
headerRenderer
=
"
cons.com.epro.child.myComboxHeader
"
/>
<
mx:DataGridColumn headerText
=
"
Column5
"
dataField
=
"
Column5
"
width
=
"
90
"
wordWrap
=
"
true
"
headerRenderer
=
"
cons.com.epro.child.myComboxHeader
"
/>
<
mx:DataGridColumn headerText
=
"
Column6
"
dataField
=
"
Column6
"
width
=
"
90
"
wordWrap
=
"
true
"
headerRenderer
=
"
cons.com.epro.child.myComboxHeader
"
/>
<
mx:DataGridColumn headerText
=
"
Column7
"
dataField
=
"
Column7
"
width
=
"
90
"
wordWrap
=
"
true
"
headerRenderer
=
"
cons.com.epro.child.myComboxHeader
"
/>
<
mx:DataGridColumn headerText
=
"
Column8
"
dataField
=
"
Column8
"
width
=
"
90
"
wordWrap
=
"
true
"
headerRenderer
=
"
cons.com.epro.child.myComboxHeader
"
/>
<
mx:DataGridColumn headerText
=
"
Column9
"
dataField
=
"
Column9
"
width
=
"
90
"
wordWrap
=
"
true
"
headerRenderer
=
"
cons.com.epro.child.myComboxHeader
"
/>
</
mx:columns
>
</
mx:DataGrid
>
for myCombox:
代码
<?
xml version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
s:MXDataGridItemRenderer xmlns:fx
=
"
http://ns.adobe.com/mxml/2009
"
xmlns:s
=
"
library://ns.adobe.com/flex/spark
"
xmlns:mx
=
"
library://ns.adobe.com/flex/mx
"
creationComplete
=
"
cc()
"
focusEnabled
=
"
true
"
>
<
fx:Script
>
<!
[CDATA[
import flash.events.Event;
import mx.collections.
*
;
import mx.controls.Alert;
import mx.controls.DataGrid;
import mx.events.FlexEvent;
import mx.events.IndexChangedEvent;
import mx.events.ListEvent;
import mx.events.ScrollEvent;
import spark.events.IndexChangeEvent;
private
function cc():
void
{
if
(owner
is
DataGrid)
DataGrid(owner).addEventListener(
"
scroll
"
, dXbrl_creationCompleteHandler);
}
override
public
function
set
data(value:Object):
void
{
if
(value
!=
null
)
{
super.data
=
value;
}
}
protected
function dXbrl_creationCompleteHandler(
event
:ScrollEvent):
void
{
var arr:ArrayCollection
=
dXbrl.dataProvider
as
ArrayCollection;
var isEquity:Boolean
=
false
;
if
(data.IsEquity)
isEquity
=
true
;
var i:
int
=
0
;
for
(i
=
0
;i
<
arr.length;i
++
)
{
if
(isEquity)
{
if
(arr[i].line_item
==
data.XbrlSelected)
{
dXbrl.selectedIndex
=
i;
break
;
}
}
else
{
if
(arr[i].pdf_item
==
data.XbrlSelected)
{
dXbrl.selectedIndex
=
i;
break
;
}
}
}
dXbrl_changeHandler();
//
data.dispatchEvent(event);
//
dXbrl.selectedIndex=dXbrl.dataProvider.getItemIndex(data.XbrlSelected);
}
protected
function dXbrl_changeHandler():
void
{
data.XbrlSelected
=
dXbrl.selectedItem.pdf_item;
data.XbrlSelectedText
=
dXbrl.selectedItem.pdf_item;
data.XbrlSelectedValue
=
dXbrl.selectedItem.line_item;
}
]]
>
</
fx:Script
>
<
s:DropDownList id
=
"
dXbrl
"
labelField
=
"
pdf_item
"
dataProvider
=
"
{data.Xbrl as ArrayCollection}
"
width
=
"
100%
"
creationComplete
=
"
dXbrl_creationCompleteHandler(null)
"
change
=
"
dXbrl_changeHandler()
"
toolTip
=
"
{dXbrl.selectedItem.pdf_item}
"
/>
</
s:MXDataGridItemRenderer
>
for myComboxHeader:
代码
<?
xml version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
s:MXDataGridItemRenderer xmlns:fx
=
"
http://ns.adobe.com/mxml/2009
"
xmlns:s
=
"
library://ns.adobe.com/flex/spark
"
xmlns:mx
=
"
library://ns.adobe.com/flex/mx
"
focusEnabled
=
"
true
"
creationComplete
=
"
cc()
"
>
<
fx:Script
>
<!
[CDATA[
import mx.collections.
*
;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.controls.DataGrid;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.controls.dataGridClasses.DataGridHeader;
import mx.events.FlexEvent;
import spark.events.IndexChangeEvent;
[Bindable]
private
var headItems:ArrayCollection
=
new
ArrayCollection([
{label:
"
company
"
,data:
1
},
{label:
"
group
"
,data:
2
}
]);
private
var col:DataGridColumn
=
null
;
override
public
function
set
data(value:Object):
void
{
if
(value
!=
null
)
{
col
=
(value
as
DataGridColumn);
super.data
=
value;
}
}
override
public
function
get
data():Object{
return
headItems;
}
protected
function cc():
void
{
var dg:DataGrid
=
this
.parent.parent
as
DataGrid;
if
(col
!=
null
)
col.headerText
=
dHeader.selectedItem.label;
}
]]
>
</
fx:Script
>
<
s:layout
>
<
s:VerticalLayout
/>
</
s:layout
>
<
s:DropDownList id
=
"
dHeader
"
labelField
=
"
label
"
selectedIndex
=
"
0
"
width
=
"
80
"
dataProvider
=
"
{headItems}
"
change
=
"
cc()
"
/>
</
s:MXDataGridItemRenderer
>
其
中,itemRenderer不是问题,难点在HeaderRender上面,因为需要获取header上的ddl选择的值,而flex的
datagrid大家知道,他是不能像c#那样findControl的,所以我用了一个全局变量private var
col:DataGridColumn=null;来存储当前是哪一列,然后将ddl的值绑定到该列的headerText上.
分享到:
相关推荐
在本话题中,我们将深入探讨如何使用`checkbox`和`combobox`作为`DataGrid`的`itemRenderer`和`headerRenderer`,以及实现全选、多选等功能。 首先,`itemRenderer`是`DataGrid`中用于自定义每一行数据项显示方式的...
本文将深入探讨如何在Flex中自定义Datagrid的ItemRender,以实现按钮、单选、复选和日期等控件的集成。 首先,我们需要了解ItemRender的基本概念。ItemRenderer是Flex提供的一种机制,允许开发者为数据网格中的每一...
将自定义的ColumnHeader组件添加到DataGrid的`headerRenderer`属性中。这样,每当我们创建一个带有这个自定义列头的新列,都会显示带有ComboBox的过滤选项。 6. 用户体验优化: 为了提高用户体验,可以考虑添加...
在DataGrid中,我们可以通过设置`itemRenderer`属性来指定特定列使用我们的自定义渲染器。例如: ```xml 数据列" dataField="yourDataField" itemRenderer="utils.MyCustomLabelRenderer"/> ``` 这里的`utils....
在 Flex 开发中,ItemRenderer 是一种非常强大的工具,它允许开发者自定义列表(List)、数据网格(DataGrid)等控件中每一项的外观和行为。通过 ItemRenderer,我们可以实现更加灵活和动态的界面设计。 #### 二、...
这涉及到对ItemRenderer和HeaderRenderer的自定义。 ItemRenderer是DataGrid中用于每个单元格显示的组件,它负责将数据模型转换为可视化的元素。为了创建自定义的ItemRenderer,你需要创建一个类并实现两个关键接口...
本资源围绕C#语言环境下的自定义Datagrid展开,旨在帮助开发者实现更为灵活和功能丰富的数据展示。 首先,"合并列显示多个字段"是指在单个单元格中展示多个数据字段的信息。这种功能在处理复杂数据模型时特别有用,...
在Flex4中,ItemRenderer是一种强大的工具,用于自定义数据Grid、List或其他数据绑定组件中的项显示方式。本文将深入探讨如何使用Flex4...但这个例子已经足够说明了如何使用Flex4来创建和使用自定义的ItemRenderer。
Flex 自定义DataGrid,带增删改查等各种功能.列锁定,序号等各种功能.
通过自定义ItemRenderer和集成PagingProvider,我们可以极大地增强DataGrid的用户体验,使其更加符合业务需求。在实际开发过程中,不断调试和优化这些自定义组件,将有助于提升应用的整体性能和易用性。
总结起来,"Flex4之DataGrid四个的示例【客户端和服务器端】"这一主题涵盖了使用Flex4的DataGrid组件展示和处理数据的基本技巧,包括客户端数据绑定、服务器端交互以及JSON数据的使用。通过具体的示例,开发者可以...
在Flex4中,动态生成DataGrid以及应用客户化itemRenderer是一项关键技能,它允许开发者根据运行时的数据结构灵活地创建用户界面。以下是对这个主题的详细解释: 首先,`DataGrid`组件是Flex中用于展示表格数据的...
在标题和描述中提到的知识点主要涉及Flex DataGrid的自定义渲染、背景色设置、跳转到其他页面以及与Flash的集成。以下是对这些知识点的详细解释: 1. **Flex DataGrid**: Flex DataGrid是一种控件,用于显示和编辑...
在Flex开发中,Datagrid组件是用于展示数据集的一个强大工具,它允许用户以表格的形式查看和操作数据。本文将深入探讨如何在Flex的Datagrid中实现数据的合计与平均值计算,帮助开发者更好地理解和应用这些功能。 ...
本篇文章将深入探讨Flex中的数据Grid组件以及如何自定义显示列,这对于提升用户体验和增强数据展示功能至关重要。 Flex DataGrid是MXML组件库中的一个控件,它允许开发者以网格形式展示数据集合。这种组件特别适用...
在构建自定义DataGrid时,开发者需要手动设置Grid的行和列,并在每个单元格中放置相应的数据显示或编辑控件。这可能包括TextBlock用于显示文本,TextBox用于输入,以及按钮和其他交互元素。 描述中提到这个demo是...
在Flex开发中,DataGrid控件是用于展示数据集的常用组件,它可以显示多行多列的数据,并且具有丰富的自定义功能。本教程主要聚焦于如何在Flex中动态创建DataGrid,并向其中添加图片,这在创建交互式、富媒体应用时...