- 浏览: 648367 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ssxszt:
...
解决PopUpManager弹出窗口RangeError: Error #2006: 提供的索引超出范围 -
lijiajia:
木子佳 写道楼主,想要源码学习,谢谢。kajiamuzi@16 ...
DataGrid和AdvancedDataGrid CheckBox全选功能 -
juedi:
很好,是我需要的东东
Flex异常处理设计 -
暖暖fh:
大神,我想要源码,这个功能我折腾了好我啊 fuhan247@1 ...
DataGrid和AdvancedDataGrid CheckBox全选功能 -
chenzi:
一样的代码,两台机器上面,完全不同的报错。。Flex实现htt ...
Flex使用Https协议
DataGrid的column的width属性不接受百分比,只接受一个具体的像素值。但是可以设置为一个小数,所有列的小数值的和必须为1,其实还是可以设置百分比的。如果你resize 大小之后有时你会发现列的大小会发生细微的变化。因此这种方法设置列还是不精确的。
导致这种原因是DataGrid在处理horizontalScrollPolicy写的不够严密造成的。
我们可以大概看下mx中DataGrid的resize事件是怎么写的。
override mx_internal function resizeColumn(col:int, w:Number):void { // there's a window of time before we calccolumnsizes // that someone can set width in AS if ((!visibleColumns || visibleColumns.length == 0) && (!visibleLockedColumns || visibleLockedColumns.length == 0)) { _columns[col].setWidth(w); _columns[col].preferredWidth = w; return; } if (w < _columns[col].minWidth) w = _columns[col].minWidth; // hScrollBar is present if (_horizontalScrollPolicy == ScrollPolicy.ON || _horizontalScrollPolicy == ScrollPolicy.AUTO) { // adjust the column's width _columns[col].setWidth(w); _columns[col].explicitWidth = w; _columns[col].preferredWidth = w; columnsInvalid = true; } else { // find the columns in the set of visible columns; var n:int = _columns.length; var i:int; for (i = 0; i < n; i++) { if (col == _columns[i].colNum) break; } if (i >= _columns.length - 1) // no resize of right most column return; col = i; // we want all cols's new widths to the right of this to be in proportion // to what they were before the stretch. // get the original space to the right not taken up by the column var totalSpace:Number = 0; var lastColumn:DataGridColumn; var newWidth:Number; //non-resizable columns don't count though for (i = col + 1; i < n; i++) { if (_columns[i].visible) if (_columns[i].resizable) totalSpace += _columns[i].width; } var newTotalSpace:Number = _columns[col].width - w + totalSpace; if (totalSpace) { _columns[col].setWidth(w); _columns[col].explicitWidth = w; } var totX:Number = 0; // resize the columns to the right proportionally to what they were for (i = col + 1; i < n; i++) { if (_columns[i].visible) if (_columns[i].resizable) { newWidth = Math.floor(_columns[i].width * newTotalSpace / totalSpace); if (newWidth < _columns[i].minWidth) newWidth = _columns[i].minWidth; _columns[i].setWidth(newWidth); totX += _columns[i].width; lastColumn = _columns[i]; } } if (totX > newTotalSpace) { // if excess then should be taken out only from changing column // cause others would have already gone to their minimum newWidth = _columns[col].width - totX + newTotalSpace; if (newWidth < _columns[col].minWidth) newWidth = _columns[col].minWidth; _columns[col].setWidth(newWidth); } else if (lastColumn) { // if less then should be added in last column // dont need to check for minWidth as we are adding lastColumn.setWidth(lastColumn.width - totX + newTotalSpace); } } itemsSizeChanged = true invalidateDisplayList(); }
注意上面红色字体的代码,你会发现如果horizontalScrollPolicy为off的时候,flex处理column宽度的时候是按照一种比例来计算的,并不是期待的那种方式。
最后一列的宽度是表格的宽度减去前面所有列的宽度。而前面列是按照Math.floor取得百分比的值,这肯定就会产生一些差值。
知道原因后,我们就可以知道如何解决这个问题了。
方法一:重写resizeColumn
方法二:监听DataGrid的resize事件,在resize事件中重新的设置cloumn的width。你可以按照第一次创建column宽度的算法重写设置。另外,如果你想写的完美的话,你可以同时支持固定值和百分比。
发表评论
-
图片背景使用九宫格
2012-07-24 10:20 0[Embed(source="../ass ... -
Flex弹出窗口做为Module
2012-07-23 18:00 0今天才知道原来TitleWindow也可以单独编译 ... -
Repeater使用简介
2012-05-09 19:26 1667mx组件中的Repeater类似与sprak中的Da ... -
Flex失效机制
2012-02-29 17:19 3024一、什么是失效机 ... -
Image倒影效果
2012-02-20 10:11 1729利用spark的BitmapImage实现倒影效果 ... -
Flex设置z轴的index
2012-02-13 14:58 4802flex4的UIComponent新增了dept ... -
得到一个字符的Unicode编码
2012-02-09 12:59 2019ActionScript 3.0String类中函数charC ... -
解决PopupManager.createPopup报错:状态“inactive”未定义
2012-02-04 21:27 2247出现这种的场景是在Module中使用弹出窗口Pop ... -
用chrome浏览器调试flex程序
2012-02-04 18:55 6925开发flex程序难免需要debug,但是IE8浏 ... -
Flash Player11不能输入中文,请谨慎升级
2011-12-18 01:04 2705很多时候,Flash的程序需要集成到其他系统中 ... -
优化Flash Builder
2011-12-18 00:54 2671Flash Builder4中新增了一个ASDO ... -
RollOver和MouseOver的不同
2011-12-12 15:03 3042共同点:都是针对鼠标的进入和进出事件。 ... -
转 Adobe移动战略失败的幕后
2011-12-08 15:56 1372最近一段时间,Adobe和Apple两个昔日的好伙 ... -
Flash Builder该这样编译,希望adboe的人能看到
2011-12-06 12:17 0从3.0开始使用flash builder,对f ... -
List或DataGrid可变行高
2011-11-29 21:57 3171默认情况下List组件是每行的行高是固定的,但 ... -
访问flex sdk版本和Flash player版本
2011-11-16 15:52 1360下面的代码将flex sdk的版本号和Fla ... -
设置TitleWindow的closeButton的mode
2011-11-16 15:42 1219默认情况下,TitleWindow的closeBu ... -
DataGrid header显示tooltip
2011-11-15 17:18 2543有时需要在DataGrid的header上显示 ... -
flash右键菜单项关键字
2011-11-15 16:26 1249有时需要在flash的右键菜单中添加 删除 ... -
设置spark的rowCount
2011-11-15 08:48 1848在mx的列表组件中,可以通过设置rowCount, ...
相关推荐
在Flex中,我们可以通过多种方式来定制DataGrid中的DataGridColumn的显示内容,例如更改显示的文本或者根据不同的条件显示不同的符号等。下面我们将详细探讨如何实现这些功能。 ### 1. 自定义DataGridColumn显示...
你可以通过遍历DataGrid的Columns集合来设置每个列的Width属性。例如,使用C#编写如下代码: ```csharp foreach (DataGridColumn column in dataGrid.Columns) { column.Width = new DataGridLength(100); // ...
- MXML 方式:在 MXML 文件中,你可以直接通过 `<mx:DataGrid>` 标签创建 DataGrid,设置其位置和大小。例如: ```xml <mx:DataGrid y="10" width="250" right="10"> </mx:DataGrid> ``` - ActionScript 方式...
通过设置DataGridColumn的HeaderStyle,可以应用自定义的样式,例如改变字体、颜色、大小等: ```xml <DataGrid> <DataGrid.ColumnHeaderStyle> </DataGrid.ColumnHeaderStyle> ... </DataGrid> ``` ...
当设置为`true`时,用户可以将DataGrid中的行或单元格拖拽到另一个位置,如果是同一DataGrid内,则实现重排;如果目标是另一个DataGrid,则实现跨DataGrid的数据移动。 #### dragEnabled:Boolean `dragEnabled`...
dataGridColumn.Width = width ?? DataGridLength.Auto; // 将新创建的列添加到DataGrid中 myDataGrid.Columns.Add(dataGridColumn); } ``` 在实际项目中,可能还需要考虑数据绑定、异常处理、以及如何根据XML...
1. **定义多层表头**:这可能需要创建多个DataGridColumn,并设置它们的Header属性来表示层级关系。同时,利用Column Span属性来控制表头跨越的列数。 2. **设置列宽和布局**:确保每个合并后的表头占据适当的宽度...
根据这个数量,我们可以动态地调整当前列的`Header`和`Width`属性,以及隐藏或显示相应的列。此外,还可以利用`DataTrigger`或`MultiDataTrigger`来控制何时合并表头。 5. **代码示例**: ```xml <DataGrid> ...
3. **设置列数据**:通过遍历数据源,动态创建并添加DataGridColumn到DataGrid: ```actionscript for each (var column:Object in columns) { var dataGridColumn:DataGridColumn = new DataGridColumn(); ...
在ActionScript中,可以通过动态创建`DataGridColumn`对象并将其添加到`DataGrid`的`columns`属性中来设置表头。 ```actionscript var column1:DataGridColumn = new DataGridColumn(); column1.headerText = "序号...
var dataGridColumn:... dataGridColumn.width=150; dataGridColumn.editable=false; var arrays:Array = new Array(); arrays= dataGrid.columns; arrays.push(dataGridColumn); dataGrid.columns = arrays;
首先,`DataGrid`的排序功能主要依赖于`DataGridColumn`对象的`SortDirection`属性和`SortMemberPath`属性。`SortDirection`定义了当前的排序方向,可以是`Ascending`(升序)或`Descending`(降序)。`...
例如,可以创建自定义的Column类,继承自mx.controls.dataGridClasses.DataGridColumn,然后设置headerText、dataField、width等属性,还可以添加renderFunction来自定义单元格的渲染。 2. **数据绑定** DataGrid...
- 可以通过设置DataGrid的属性如宽度(width)、位置(x,y)和可编辑性(editable)来定义其外观和行为。 - 在MXML中创建DataGrid的格式通常包括指定标签 mx:DataGrid。 - DataGrid组件中可以嵌套使用其他组件,如 mx:...
在DataGrid中,我们可以通过设置`itemRenderer`属性来指定特定列使用我们的自定义渲染器。例如: ```xml <mx:DataGridColumn headerText="数据列" dataField="yourDataField" itemRenderer="utils....
<mx:DataGrid dataProvider="{dataGriddataProvider}" width="100%" height="100%"> <mx:DataGridColumn headerText="字段1" dataField="field1"/> <mx:DataGridColumn headerText="字段2" dataField="field2"/>...
2. 列宽调整:使用 `DataGridColumn.Width` 设置列宽策略,以优化渲染性能。 3. 使用 `ObservableCollection`:实时更新数据源,`DataGrid` 将自动响应变化。 综上所述,`WPF DataGrid` 是一个功能丰富的控件,它...
<s:DataGrid id="dtGrid" width="100%" height="100%" itemRenderer="com.mycompany.renderers.ComboBoxRenderer"> </s:DataGrid> ``` #### 3. 实现ComboBoxRenderer 创建一个名为`ComboBoxRenderer`的新类,该类...
<mx:MXGridColumn xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" creationComplete="init()"> <![CDATA[ override public function set data(value:Object):void { super.data = value; if (value ...
<mx:DataGridColumn headerText="选" itemRenderer="view.keiyakusakiCheckBox" width="50"/> <mx:DataGridColumn headerText="" dataField="keiyakusakiCode" width="100"/> ``` 这里,`itemRenderer`属性指定了...