2007年5月17日 @ 13:07
Flex2:在DataGrid中隐藏表头并且dataProvider没有数据时显示列垂直分隔线
转自:http://blog.eshangrao.com/index.php/2007/05/09/389-flex2-datagridshowheader-falsedataprovider
如果我们隐藏DataGrid的表头(showHeader = false)并且dataProvider没有数据的话,表格的列垂直分隔线将不会显示,这个列垂直分隔线只有在dataProvider有数据才显示(或者没数据但showHeader=ture也显示)。
这是因为在隐藏表头的时,DataGrid的列垂直分隔线绘制是基于dataGrid的listData属性,当表头显示时,该listData的row 0指向表头数据列,也就是通过遍历listData的第一行数据来绘制列垂直分隔线,所以隐藏表头时并且dataProvider没有数据时,就不能绘制列垂直分隔线了。
要解决这个问题,需要扩展DataGrid,重载drawLinesAndColumnBackgrounds方法,遍历列数组而不是listData来绘制列垂直分隔线。
<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
override protected function drawLinesAndColumnBackgrounds():void {
super.drawLinesAndColumnBackgrounds();
var lineCol:uint = getStyle("verticalGridLineColor");
var lines:Sprite = Sprite(listContent.getChildByName("lines"));
var cols:Array = columns;
var n:int = cols.length;
var xx:int = 0;
for (var i:int = 0; i < n; i++)
{
xx += cols[i].width;
drawVerticalLine(lines, i, lineCol, xx);
}
}
]]>
</mx:Script>
</mx:DataGrid>
测试代码如下:
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:eshangrao="com.eshangrao.lib.control.*">
<mx:XMLList id="foo">
<data name="feiy" phone="137*******" email="eshangrao@gmail.com" />
<data name="feiy2" phone="137*******" email="eshangrao@gmail.com" />
<data name="feiy3" phone="137*******" email="eshangrao@gmail.com" />
</mx:XMLList>
<mx:Panel title="DataGrid Control Example" height="100%" width="100%"
paddingTop="10" paddingLeft="10" paddingRight="10">
<mx:Label width="100%" color="blue"
text="DataGrid control with three rows"/>
<mx:DataGrid showHeaders="false" width="100%" height="100%" dataProvider="{foo}" verticalGridLines="true">
<mx:columns>
<mx:DataGridColumn dataField="@name" headerText="Name" />
<mx:DataGridColumn dataField="@phone" headerText="Phone" />
<mx:DataGridColumn dataField="@email" headerText="Email" />
</mx:columns>
</mx:DataGrid>
<mx:Label width="100%" color="blue"
text="DataGrid control with no row"/>
<mx:DataGrid showHeaders="false" width="100%" height="100%" verticalGridLines="true">
<mx:columns>
<mx:DataGridColumn dataField="name" headerText="Name" />
<mx:DataGridColumn dataField="phone" headerText="Phone" />
<mx:DataGridColumn dataField="email" headerText="Email" />
</mx:columns>
</mx:DataGrid>
<mx:Label width="100%" color="blue"
text="Custom DataGrid control with no row"/>
<eshangrao:FixedVLineDataGrid id="dg" showHeaders="false" width="100%" height="100%" rowCount="5" verticalGridLines="true">
<eshangrao:columns>
<mx:DataGridColumn dataField="name" headerText="Name" />
<mx:DataGridColumn dataField="phone" headerText="Phone" />
<mx:DataGridColumn dataField="email" headerText="Email" />
</eshangrao:columns>
</eshangrao:FixedVLineDataGrid>
</mx:Panel>
</mx:Application>
原文:Drawing vertical lines in the datagrid when showHeader = false and dataProvider is empty
Filed under: 资料 · Tags: flex datagrid
Articles related:
Flex various Explorer[转] (2007-5-16 11:7:40)
Flex 2.0 Samples [转] (2007-5-16 10:58:0)
Flex 常用语句 (2007-5-14 8:41:59)
创建模块化应用程序[转载] (2007-5-12 8:38:54)
Building Modular Applications (2007-5-12 8:35:7)
Populate a Flex Accordion with XML (2007-5-11 22:34:35)
Loading Flex Applications Into Flex Applications (2007-5-11 22:27:49)
Flex Component Kit for Flash CS3 (2007-5-7 15:51:31)
Flex Quick Starts: Building an advanced user inter (2007-5-6 23:8:14)
Designing Flex 2 skins with Flash, Photoshop, Fire (2007-5-6 23:5:44)
Leave a Comment
◎welcome to give out your point。
