日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GridView跨行合并单元格

發布時間:2025/6/17 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GridView跨行合并单元格 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
///?<summary>
///GridViewCellCombine?的摘要說明
///?</summary>
public?class?GridViewCellCombine
{
????
///?<summary>
????
///?目標GridView
????
///?</summary>
????GridView?_gridView;

????
///?<summary>
????
///?上一行單元格集
????
///?</summary>
????TableCell[]?_cells;

????
///?<summary>
????
///?要合并單元格的列索引集合
????
///?</summary>
????int[]?_colIndexes;

????
///?<summary>
????
///?單元格合并相等判斷條件
????
///?</summary>
????ICellEquality[]?_colCellEquality;

????
///?<summary>
????
///?GridView單元格合并輔助類
????
///?</summary>
????
///?<param?name="gridView">目標GridView</param>
????
///?<param?name="colIndexes">要合并的列的索引號</param>
????public?GridViewCellCombine(GridView?gridView,?int[]?colIndexes,?ICellEquality[]?colCellEquality)
????{
????????
if?(gridView?==?null)
????????????
throw?new?Exception("GridView不能為空");

????????
this._gridView?=?gridView;
????????_gridView.RowDataBound?
+=?new?GridViewRowEventHandler(GridViewRowDataBound);

????????
if?(colIndexes?!=?null?&&?colCellEquality?!=?null)//在指定了要合并單元格列及單元格比較器時,列數和比較器數應該一樣。
????????{
????????????
if?(colIndexes.Length?!=?colCellEquality.Length)
????????????{
????????????????
throw?new?Exception("請為要合并單元格的每一列都添加單元格比較類");
????????????}
????????}

????????
if?(colIndexes?!=?null)
????????{
????????????_colIndexes?
=?colIndexes;
????????????_cells?
=?new?TableCell[colIndexes.Length];
????????}
????????
else
????????{
????????????_cells?
=?new?TableCell[this._gridView.Columns.Count];
????????????_colIndexes?
=?Enumerable.Range(0,?this._gridView.Columns.Count).ToArray();
????????}

????????
if?(colCellEquality?!=?null)
????????{
????????????_colCellEquality?
=?colCellEquality;
????????}
????????
else
????????????_colCellEquality?
=?new?ICellEquality[_cells.Length];

????}

????
///?<summary>
????
///?GridView行綁定事件
????
///?</summary>
????
///?<param?name="sender"></param>
????
///?<param?name="e"></param>
????void?GridViewRowDataBound(object?sender,?GridViewRowEventArgs?e)
????{
????????
if?(_colIndexes?!=?null)
????????{
????????????
for?(int?i?=?0;?i?<?_colIndexes.Length;?i++)
????????????{
????????????????
//如果上一行該列單元格為空,則從當前行的單元格之后進行比較
????????????????if?(_cells[i]?==?null)
????????????????{
????????????????????_cells[i]?
=?e.Row.Cells[_colIndexes[i]];//把當前單元格引用暫存用于下一行時比較
????????????????????continue;
????????????????}

????????????????
//如果當前行第_colIndexes[i]列單元格與上一行單元格相等,合并單元格
????????????????if?(CellEquals(_cells[i],?e.Row.Cells[_colIndexes[i]],?_colCellEquality[i]))
????????????????{
????????????????????_cells[i].RowSpan
++;
????????????????????
if?(_cells[i].RowSpan?==?1)//RowSpan屬性為0?1時都表示不合并
????????????????????????_cells[i].RowSpan++;

????????????????????e.Row.Cells[_colIndexes[i]].Visible?
=?false;
????????????????}
????????????????
else
????????????????{
????????????????????_cells[i]?
=?e.Row.Cells[_colIndexes[i]];
????????????????}
????????????}
????????}
????}

????
///?<summary>
????
///?獲取指定位置的單元格
????
///?</summary>
????
///?<param?name="rowIndex"></param>
????
///?<param?name="colIndex"></param>
????
///?<returns></returns>
????private?TableCell?GetCell(int?rowIndex,?int?colIndex)
????{
????????
return?this._gridView.Rows[rowIndex].Cells[colIndex];
????}

????
///?<summary>
????
///?單元格相等比較
????
///?</summary>
????
///?<param?name="cell1">cell1</param>
????
///?<param?name="cell2">cell2</param>
????
///?<param?name="equality">相等比較器</param>
????
///?<returns>返回是否相等</returns>
????private?bool?CellEquals(TableCell?cell1,?TableCell?cell2,?ICellEquality?equality)
????{
????????
bool?result?=?false;
????????
if?(equality?==?null)//如果比較器為空采用默認比較器
????????{
????????????result?
=?DefaultCellEquality.Entity.CellEquals(cell1,?cell2);
????????}
????????
else
????????{
????????????result?
=?equality.CellEquals(cell1,?cell2);
????????}

????????
return?result;
????}

????
///?<summary>
????
///?單元格默認比較類
????
///?</summary>
????class?DefaultCellEquality?:?ICellEquality
????{
????????
///?<summary>
????????
///?默認的單元格相等比較器,用單元格內的文字進行比較
????????
///?</summary>
????????public?static?DefaultCellEquality?Entity?=?new?DefaultCellEquality();

????????
#region?ICellEquality?成員

????????
///?<summary>
????????
///?比較方法
????????
///?</summary>
????????
///?<param?name="cell1">cell1</param>
????????
///?<param?name="cell2">cell2</param>
????????
///?<returns>是否相等</returns>
????????public?bool?CellEquals(TableCell?cell1,?TableCell?cell2)
????????{
????????????
if?(cell1?==?null?||?cell2?==?null)
????????????????
return?false;
????????????
return?cell1.Text.Equals(cell2.Text);//根據單元格內容比較
????????}

????????
#endregion
????}
}

///?<summary>
///?單元格相等比較器
///?</summary>
public?interface?ICellEquality
{
????
///?<summary>
????
///?比較兩個單元格是否相等
????
///?</summary>
????
///?<param?name="cell1">單元格1</param>
????
///?<param?name="cell2">單元格2</param>
????
///?<returns>返回是否相等</returns>
????bool?CellEquals(TableCell?cell1,?TableCell?cell2);
}

轉載于:https://www.cnblogs.com/heros/archive/2009/07/12/1522053.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的GridView跨行合并单元格的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。