1.写一个judge方法,判断cell里的内容是否相同:

private int isTheSameCellValue(int column, int row)
        {
            DataGridViewCell cell1 
= dtgMeisaiData[column, row];
            DataGridViewCell cell2 
= dtgMeisaiData[column, row - 1];
            
if (cell1.Value == null || cell2.Value == null)
                
return -1;
            
//文字列としてセルの値を比較
            if (cell1.Value.ToString() == cell2.Value.ToString())
                
return 1;
            
else
                
return 0;
        }

2.为DataGridView写一个CellPainting事件

注:由于该效果与该事件的触发时机有关,故要手写,而非直接在设计窗口双击添加

private void dtgMeisaiData_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            
int rtnInt = 0;
            
//セルの下側の境界線を「境界線なし」に設定
            e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None;
            
//1行目や列ヘッダ、行ヘッダの場合は何もしない
            if (e.RowIndex < 1 || e.ColumnIndex < 0)
                
return;
            rtnInt 
= isTheSameCellValue(e.ColumnIndex, e.RowIndex);
            
if (rtnInt == 1)
            {
                
//同一値の場合、セルの上側の境界線を「境界線なし」に設定
                e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None;
            }
            
else if (rtnInt == 0)
            {
                
//同一値でない場合、セルの上側の境界線を既定の境界線に設定
                e.AdvancedBorderStyle.Top = dtgMeisaiData.AdvancedCellBorderStyle.Top;
            }
            
else if (rtnInt == -1)
            {   
// どちらかがNULL値の場合、何もしない。
            }
        }

3.在适当的时机加入CellPainting事件

如果没有特殊需求,一般在DataGridView被赋完DataSource之后添加即可

dtgMeisaiData.CellPainting   += new DataGridViewCellPaintingEventHandler(dtgMeisaiData_CellPainting);

 


posted on 2011-06-10 09:46 Ying-er 阅读(2202) 评论(1)  编辑  收藏 所属分类: .Net

评论:
# re: C#让DataGridView实现类似合并单元格的效果 2012-02-20 22:35 | zome
根本没有合并,只是去掉了线条  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: