`
Robin1320
  • 浏览: 38732 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

双击DataGrid列,自适应宽度。

    博客分类:
  • Flex
阅读更多

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;
  }
 }
}

 

 

分享到:
评论
2 楼 petitlen 2011-03-21  
不好用,如果使用了labelfunction,自适应功能就无效了
1 楼 petitlen 2011-03-21  
不好用,如果使用了labelfunction,自适应功能就无效了

相关推荐

    easyui datagrid标题列宽度自适应

    标题 "easyui datagrid标题列宽度自适应" 涉及到的是JavaScript库EasyUI中的一个功能特性,它主要用于Web应用程序的数据展示。EasyUI是一个基于jQuery的轻量级框架,提供了一系列易于使用的UI组件,包括datagrid,...

    EasyUI 数据表格datagrid列自适应内容宽度的实现

    在数据表格中实现列宽自适应内容宽度,通常的做法是遍历表格中的每一列,通过比较内容的长度来确定列的宽度。例如,在EasyUI的datagrid中,我们可以编写一个函数,该函数首先加载表格,然后获取表头字段列表,并获取...

    easyUI datagrid rownumber自适应宽度扩展JS

    easyUI datagrid 自动调整行号大小

    WinCE下设置DataGrid的栏位宽度

    在某些场景下,你可能希望部分列固定宽度,部分列自适应宽度。这可以通过混合使用`Width`属性和`AutoSizeMode`来实现。例如,第一列固定宽度,其他列自适应: ```csharp dataGrid.Columns[0].Width = new ...

    Windows Mobile 简单的控制 DataGrid 各列宽度的源代码

    本主题将深入探讨如何在Windows Mobile环境下简单地控制DataGrid各列的宽度,以便更好地适应屏幕显示和用户体验。 DataGrid控件在.NET Compact Framework中提供了基本的列设置功能,包括列的宽度、样式和绑定数据源...

    解决EasyUIdataGrid列比较多,无数据,列展现不全

    ### 解决EasyUI dataGrid列较多时无数据显示不全的问题 在使用EasyUI框架进行前端开发的过程中,可能会遇到dataGrid组件在数据为空时列显示不完整的问题。这不仅影响用户体验,也降低了系统的可用性。本文将详细...

    DataGrid自定义列标题

    在实际开发中,我们经常需要根据需求对DataGrid的列标题进行自定义,以增强界面的用户体验和美观度。本篇将深入探讨如何在DataGrid中实现自定义列标题。 一、自定义列标题文本 1.1 使用AutoGenerateColumns属性 ...

    WPF根据xml配置文件加载DataGrid列.zip

    这个文件将包含关于DataGrid列的信息,例如列的名称、类型、宽度等。例如,一个简单的XML配置文件可能如下所示: ```xml ``` 接下来,我们需要在C#代码中解析这个XML文件。可以使用System.Xml.Linq库中的...

    datagrid代码改变单元格宽度

    这个问题源自一个具体的编程场景:用户希望动态地控制 datagrid 内各列的宽度,以实现更佳的数据展示效果或适应不同的界面布局需求。我们将从标题、描述及部分示例代码出发,逐一解析其中涉及的技术细节,并拓展相关...

    WPF中自定义复杂DataGrid列样式

    WPF中DataGrid控件有时需要在一列中显示多个字段数据,并实现一定的排版,本示例即为解决此类问题提供参考。

    flex 自定义 datagrid 列头带组合框进行过滤

    这个主题——"flex 自定义 datagrid 列头带组合框进行过滤",涉及到的关键知识点包括Flex组件定制、DataGrid列头的扩展以及ComboBox控件的使用。 1. Flex组件定制: 在Flex中,我们可以使用MXML和ActionScript来...

    WPF之DataGrid动态生成列实例

    本实例聚焦于“WPF之DataGrid动态生成列”,这一技术通常在数据结构不固定或者需要根据后台数据自适应列数的情况下显得尤为实用。在传统的使用方式中,DataGrid的列是预先硬编码定义的,但在某些场景下,我们需要...

    自适应合计行的DataGrid

    扩展了DataGrid,自适应高度。 实现Grid的合计功能。

    easyui datagrid tip 超出宽度省略

    datagrid添加tooltip及超出宽度添加省略号

    C#实现给DataGrid单元行添加双击事件的方法

    在这个特定的场景中,我们关注的是如何为DataGrid的每一行添加双击事件,以便在用户双击某一行时触发特定的操作,如弹出删除确认对话框。以下是对这一主题的详细解释。 首先,我们需要了解的是在ASP.NET中,...

    WPF_MVVM中DataGrid列中使用ComBox绑定

    本话题将探讨如何在MVVM架构下,将ComBox控件集成到DataGrid列中,并实现其与数据模型的双向绑定,以实现在选择ComBox项后,数据能够即时更新到绑定的实体中。 首先,我们需要理解DataGrid的基本用法。DataGrid是...

    如何让easyui gridview 宽度自适应窗口改变及fitColumns应用

    总的来说,通过设置`fitColumns: true`和监听resize事件并调用`datagrid('resize')`,你可以实现EasyUI GridView的宽度自适应窗口变化。这种方法对于创建响应式的Web界面非常有用,使得用户在不同设备或屏幕尺寸下都...

    C# 修改winform程序中datagrid列头信息的实际例子源码

    C# 修改winform程序中datagrid列头信息的实际例子源码,内含讲解,和一段实际操作的例子,不错的知识点,供大家学习,我们都知道,再ASP.NET中的datagrid可以设置属性列的列头,但是在winform中却不能,所以提供这个...

    jquery.easyui.datagrid扩展合并列

    jquery.easyui.datagrid自动合并列扩展,支持多列合并。 用法:加载成功后 $('#'+tab).datagrid("autoMergeCells",['列名','列名']);

Global site tag (gtag.js) - Google Analytics