package org.sk.controls
{
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextLineMetrics;
import mx.collections.ArrayCollection;
import mx.controls.DataGrid;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.core.ScrollPolicy;
import org.sk.controls.vo.DataGridColumnInfoVo;
/**
*
* @author Ozone
* MyDataGrid-> DataGrid
* 1. 双击 自定适应内容宽度
* 思路: 1.先给 DataGrid的header添加 MouseDoubleClick事件
* 2.记录 所有列的x坐标
* 3.双击是 根据x的坐标寻找 Column
* 4.找到Column后,找出 此列下最长的 文字的 长度
* 5.设置此Column的width 为 合适的长度的
*/
public class MyDataGrid extends DataGrid
{
private var widthMap:Array=[]; //存放 列,宽度 映射关系
private var _textField:TextField=new TextField();
/**
* 构造
*/
public function MyDataGrid()
{
super();
this.doubleClickEnabled=true;
this.horizontalScrollPolicy=ScrollPolicy.ON;
}
override protected function createChildren():void
{
super.createChildren();
this.header.addEventListener(MouseEvent.DOUBLE_CLICK, mouseDblClickHandler);
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
widthMap.length=0;
var tmpWidth:uint=0;
for (var i:uint=0; i < columns.length; i++)
{
var col:DataGridColumn=columns[i];
tmpWidth+=col.width;
var colVo:DataGridColumnInfoVo=new DataGridColumnInfoVo(i, col.dataField, tmpWidth - DataGridColumnInfoVo.PRECSITION, tmpWidth + DataGridColumnInfoVo.PRECSITION);
widthMap.push(colVo);
}
}
/*表头 双击事件*/
private function mouseDblClickHandler(e:MouseEvent):void
{
var colVo:DataGridColumnInfoVo=getColumnInfo(this.mouseX);
if (colVo)
{
var maxLen:int=getMaxLength(colVo.label);
if (maxLen != -1)
{
maxLen+=30;
var col:DataGridColumn=columns[colVo.index];
if (col)
{
col.width=maxLen;
}
}
}
}
/*获取 列索引 */
private function getColumnInfo(mousex:int):DataGridColumnInfoVo
{
var scrollColCount:int = this.horizontalScrollPosition;
if(scrollColCount!=0){
mousex += widthMap[scrollColCount-1].min + DataGridColumnInfoVo.PRECSITION;
}
for each (var colVo:DataGridColumnInfoVo in widthMap)
{
if (colVo.min < mousex && mousex < colVo.max)
return colVo;
}
return null;
}
/*获取 最长行的长度*/
private function getMaxLength(colLabel:String):int
{
var arr:ArrayCollection=this.dataProvider as ArrayCollection;
var maxLen:int=-1;
if (arr)
{
for (var i:uint=0; i < arr.length; i++)
{
var obj:Object=arr.getItemAt(i);
_textField.text=obj[colLabel] ? obj[colLabel] : '';
var line:TextLineMetrics=_textField.getLineMetrics(0);
if (line.width > maxLen)
maxLen=line.width;
}
}
return maxLen;
}
}
}
3. 用的 值对象
package org.sk.controls.vo
{
import mx.controls.dataGridClasses.DataGridColumn;
public class DataGridColumnInfoVo
{
private var _index:uint;
private var _min:int;
private var _max:int;
private var _label:String;
public static const PRECSITION:int = 3;
public function DataGridColumnInfoVo(_index:uint,_label:String,_min:int,_max:int)
{
this._index = _index;
this._label = _label;
this._min = _min;
this._max = _max;
}
public function get index():uint{
return _index;
}
public function set index(index:uint):void{
_index = index;
}
public function get label():String{
return _label;
}
public function set label(label:String):void{
_label = label;
}
public function get min():int{
return _min;
}
public function set min(min:int):void{
_min = min;
}
public function get max():int{
return _max;
}
public function set max(max:int):void{
_max = max;
}
}
}
分享到:
相关推荐
主要介绍了EasyUI 数据表格datagrid列自适应内容宽度的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
easyUI datagrid 自动调整行号大小
NULL 博文链接:https://wusuobuai.iteye.com/blog/1860496
DataGrid自定义列标题 DataGrid自定义列标题 DataGrid自定义列标题 DataGrid自定义列标题 DataGrid自定义列标题
解决EasyUIdataGrid列比较多,无数据,列展现不全
Windows Mobile 简单的控制 DataGrid 各列宽度的源代码 更多资源请访问http://www.59186618.com
WPF根据xml配置文件加载DataGrid列。这样可以做到修改xml文件来改变数据表格列,更加灵活。
datagrid代码改变单元格宽度 datagrid代码改变单元格宽度 datagrid代码改变单元格宽度
扩展了DataGrid,自适应高度。 实现Grid的合计功能。
datagrid添加tooltip及超出宽度添加省略号
flex 自定义 datagrid 列头带组合框进行过滤
C# 修改winform程序中datagrid列头信息的实际例子源码,内含讲解,和一段实际操作的例子,不错的知识点,供大家学习,我们都知道,再ASP.NET中的datagrid可以设置属性列的列头,但是在winform中却不能,所以提供这个...
WinCE下设置DataGrid的栏位宽度,亲测可以
jquery.easyui.datagrid自动合并列扩展,支持多列合并。 用法:加载成功后 $('#'+tab).datagrid("autoMergeCells",['列名','列名']);
这是一个VB6.0调整datagrid的模块代码,网上找过很多,都没有VB6的,而且都是两大段的,我这个简单就简单实用了。
UI设计在一个系统中的重要性是不容忽视的,我们开发人员要做到:让用户去控制...给你的Easyui-DataGrid 表头添加一点料吧 Easyui-Datagrid—表头灵活显示http://blog.csdn.net/u010293698/article/details/47956865
主要介绍了C#实现给DataGrid单元行添加双击事件的方法,较为详细的分析了C#给DataGrid单元添加双击事件的步骤及相关实现代码,具有一定参考借鉴价值,需要的朋友可以参考下
为window添加一个resize事件,在事件回调方法中让gridview改变宽度即可: 代码如下: //在调整了窗口大小以后,设置easyui gridview也调整宽度 $(window).resize(function () { $(‘#gvManage’).datagrid(‘resize’...
WPF之MVVM中DataGrid中嵌入Combox,改变Combox可回传至绑定的实体