DevExpres ASPxGridView自定义多表头及合并单元格Word文档格式.docx

上传人:b****8 文档编号:22660275 上传时间:2023-02-05 格式:DOCX 页数:25 大小:45.29KB
下载 相关 举报
DevExpres ASPxGridView自定义多表头及合并单元格Word文档格式.docx_第1页
第1页 / 共25页
DevExpres ASPxGridView自定义多表头及合并单元格Word文档格式.docx_第2页
第2页 / 共25页
DevExpres ASPxGridView自定义多表头及合并单元格Word文档格式.docx_第3页
第3页 / 共25页
DevExpres ASPxGridView自定义多表头及合并单元格Word文档格式.docx_第4页
第4页 / 共25页
DevExpres ASPxGridView自定义多表头及合并单元格Word文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

DevExpres ASPxGridView自定义多表头及合并单元格Word文档格式.docx

《DevExpres ASPxGridView自定义多表头及合并单元格Word文档格式.docx》由会员分享,可在线阅读,更多相关《DevExpres ASPxGridView自定义多表头及合并单元格Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

DevExpres ASPxGridView自定义多表头及合并单元格Word文档格式.docx

}}

Dictionary<

GridViewCommandColumn,TableCell>

commandCells=newDictionary<

();

GridViewDataColumn,TableCell>

mergedCells=newDictionary<

TableCell,int>

cellRowSpans=newDictionary<

#region外部调用入口(初始化)

publicASPxGridViewHelper(ASPxGridViewgrid)

this.grid=grid;

}

///<

summary>

///初始化

/summary>

paramname="

grid"

>

要操作的ASPxGridView<

/param>

fieldName"

根据哪个字段分组合并,例如单据编号<

columnNumber"

使后N列不进行合并,例如N=4,即后4列数据不参与合并<

header"

///ASPxGridView多表头实现

///表头格式定义方法:

相邻父列#分隔上下级空格分隔相邻子级用逗号分隔

isOpenMutiHeader"

是否启用多表头,默认关闭<

isOpenMergeCell"

是否启用合并单元格,默认关闭<

publicASPxGridViewHelper(ASPxGridViewgrid,stringfieldName,int[]notMergeNumbers,stringheader,boolisOpenMutiHeader,boolisOpenMergeCell)

this.fieldName=fieldName;

this.header=header;

this.isOpenMergeCell=isOpenMergeCell;

this.isOpenMutiHeader=isOpenMutiHeader;

this.notMergeNumbers=notMergeNumbers;

Grid.HtmlRowCreated+=newASPxGridViewTableRowEventHandler(grid_HtmlRowCreated);

Grid.HtmlDataCellPrepared+=newASPxGridViewTableDataCellEventHandler(grid_HtmlDataCellPrepared);

Grid.HtmlCommandCellPrepared+=newASPxGridViewTableCommandCellEventHandler(grid_HtmlCommandCellPrepared);

#region初始化准备

voidgrid_HtmlDataCellPrepared(objectsender,ASPxGridViewTableDataCellEventArgse)

if(cellRowSpans.ContainsKey(e.Cell))

e.Cell.RowSpan=cellRowSpans[e.Cell];

voidgrid_HtmlCommandCellPrepared(objectsender,ASPxGridViewTableCommandCellEventArgse)

voidgrid_HtmlRowCreated(objectsender,ASPxGridViewTableRowEventArgse)

if(isOpenMutiHeader)

ASPxGridViewgv=senderasASPxGridView;

if(e.RowType==DevExpress.Web.ASPxGridView.GridViewRowType.Data&

&

e.VisibleIndex==gv.PageIndex*gv.SettingsPager.PageSize)

SplitTableHeader(e.Row,header);

if(isOpenMergeCell)

boolisPrevColumnHasSameFormID=IsSameData(fieldName,e.VisibleIndex,e.VisibleIndex-1);

boolisNextColumnHasSameFormID=IsSameData(fieldName,e.VisibleIndex,e.VisibleIndex+1);

if(Grid.GetRowLevel(e.VisibleIndex)!

=Grid.GroupCount)return;

List<

int>

num=newList<

if(notMergeNumbers!

=null)

num.AddRange(notMergeNumbers);

for(inti=e.Row.Cells.Count-1;

i>

=0;

i--)

if(!

(num!

=null&

num.Count>

0&

num.Contains(i)))

DevExpress.Web.ASPxGridView.Rendering.GridViewTableDataCelldataCell=e.Row.Cells[i]asDevExpress.Web.ASPxGridView.Rendering.GridViewTableDataCell;

DevExpress.Web.ASPxGridView.Rendering.GridViewTableCommandCellcommandCell=e.Row.Cells[i]asDevExpress.Web.ASPxGridView.Rendering.GridViewTableCommandCell;

if(dataCell!

MergeCells(dataCell.DataColumn,e.VisibleIndex,dataCell,isNextColumnHasSameFormID,isPrevColumnHasSameFormID);

elseif(commandCell!

MergeCells(commandCell.Column,e.VisibleIndex,commandCell,isNextColumnHasSameFormID,isPrevColumnHasSameFormID);

voidMergeCells(GridViewCommandColumncolumn,intvisibleIndex,TableCellcell,boolisNextColumnHasSameFormID,boolisPrevColumnHasSameFormID)

if(isNextColumnHasSameFormID)

commandCells.ContainsKey(column))

commandCells[column]=cell;

if(isPrevColumnHasSameFormID)

((TableRow)cell.Parent).Cells.Remove(cell);

if(commandCells.ContainsKey(column))

TableCellcommCell=commandCells[column];

cellRowSpans.ContainsKey(commCell))

cellRowSpans[commCell]=1;

cellRowSpans[commCell]=cellRowSpans[commCell]+1;

isNextColumnHasSameFormID)

commandCells.Remove(column);

voidMergeCells(GridViewDataColumncolumn,intvisibleIndex,TableCellcell,boolisNextColumnHasSameFormID,boolisPrevColumnHasSameFormID)

boolisNextTheSame=IsNextColumnHasSameData(column,visibleIndex);

if(isNextColumnHasSameFormID&

isNextTheSame)

mergedCells.ContainsKey(column))

mergedCells[column]=cell;

if(isPrevColumnHasSameFormID&

IsPrevColumnHasSameData(column,visibleIndex))

if(mergedCells.ContainsKey(column))

TableCellmergedCell=mergedCells[column];

cellRowSpans.ContainsKey(mergedCell))

cellRowSpans[mergedCell]=1;

cellRowSpans[mergedCell]=cellRowSpans[mergedCell]+1;

mergedCells.Remove(column);

}

boolIsNextColumnHasSameData(GridViewDataColumncolumn,intvisibleIndex)

//isitthelastvisiblerow

if(visibleIndex>

=Grid.VisibleStartIndex+Grid.VisibleRowCount-1)returnfalse;

returnIsSameData(column.FieldName,visibleIndex,visibleIndex+1);

boolIsPrevColumnHasSameData(GridViewDataColumncolumn,intvisibleIndex)

ASPxGridViewgrid=column.Grid;

//isitthefirstvisiblerow

if(visibleIndex<

=Grid.VisibleStartIndex)returnfalse;

returnIsSameData(column.FieldName,visibleIndex,visibleIndex-1);

boolIsSameData(stringfieldName,intvisibleIndex1,intvisibleIndex2)

//isitagrouprow?

if(Grid.GetRowLevel(visibleIndex2)!

=Grid.GroupCount)returnfalse;

returnobject.Equals(Grid.GetRowValues(visibleIndex1,fieldName),Grid.GetRowValues(visibleIndex2,fieldName));

///重写表头

targetHeader"

目标表头<

newHeaderNames"

新表头<

remarks>

///等级#级别#上期结存件数,重量,比例#本期调入收购调入件数,重量,比例#本期发出车间投料件数,重量,

///比例#本期发出产品外销百分比件数,重量,比例#平均值

/remarks>

voidSplitTableHeader(TableRowtargetHeader,stringnewHeaderNames)

Tabletable=targetHeader.ParentasTable;

table.Rows.RemoveAt(0);

table.CssClass="

dxgvTable_Office2003_Blue"

;

introw=GetRowCount(newHeaderNames);

intcol=GetColCount(newHeaderNames);

string[,]nameList=ConvertList(newHeaderNames,row,col);

intRowSpan=0;

intColSpan=0;

for(intk=0;

k<

row;

k++)

TableRowtrow=newTableRow();

trow.Height=20;

stringLastFName="

"

for(inti=0;

i<

col;

i++)

TableCellcell=newTableCell();

if(LastFName==nameList[i,k]&

k!

=row-1)

LastFName=nameList[i,k];

continue;

else

intbFlag=IsVisible(nameList,k,i,LastFName);

switch(bFlag)

case0:

break;

case1:

RowSpan=GetSpanRowCount(nameList,row,k,i);

ColSpan=GetSpanColCount(nameList,row,col,k,i);

cell=newTableCell();

cell.RowSpan=RowSpan;

cell.ColumnSpan=ColSpan;

cell.CssClass="

dxgvHeader_Office2003_Blue"

cell.Text=LastFName;

cell.BorderStyle=BorderStyle.Solid;

cell.BorderWidth=Unit.Pixel(0);

cell.Style.Add(HtmlTextWriterStyle.TextAlign,"

center"

);

cell.Style.Add(HtmlTextWriterStyle.BorderCollapse,"

collapse"

separate"

cell.Style["

BORDER-RIGHT-WIDTH"

]="

1px"

BORDER-BOTTOM-WIDTH"

trow.Cells.Add(cell);

case-1:

string[]EndColName=LastFName.Split(newchar[]{'

'

});

foreach(stringeNameinEndColName)

cell.Text=eName;

if(k!

{//不是起始行,加入新行标签

//cell.Text=cell.Text+"

<

/th>

/tr>

tr>

table.Rows.AddAt(k,trow);

/**/

///如果上一行已经输出和当前内容相同的列头,则不显示

ColumnList"

表头集合<

rowIndex"

行索引<

colIndex"

列索引<

returns>

1:

显示,-1:

含'

分隔符,0:

不显示<

/returns>

privateintIsVisible(string[,]ColumnList,introwIndex,intcolIndex,stringCurrName)

if(rowIndex!

=0)

if(ColumnList[colIndex,rowIndex-1]==CurrName)

return0;

if(ColumnList[colIndex,rowIndex].Contains("

"

))

return-1;

return1;

///取得和当前索引行及列对应的下级的内容所跨的行数

row"

行数<

privateintGetSpanRowCount(string[,]ColumnList,introw,introwIndex,intcolIndex)

stringLastName="

intRowSpan=1;

for(intk=rowIndex;

if(ColumnList[colIndex,k]==LastName)

RowSpan++;

LastName=ColumnList[colIndex,k];

returnRowSpan;

summar

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1