2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C# DataGridView单元格合并与文字居中

C# DataGridView单元格合并与文字居中

时间:2019-05-06 13:59:32

相关推荐

C# DataGridView单元格合并与文字居中

#region <<单元格合并配置>>public struct MergeCellsParam{public int iStartCellColumn;public int iStartCellRow;public int iEndCellColumn;public int iEndCellRow;public string strText;public MergeCellsParam(int _iStartColumn, int _iStartRow, int _iEndColumn, int _iEndRow){iStartCellColumn = _iStartColumn;iStartCellRow = _iStartRow;iEndCellColumn = _iEndColumn;iEndCellRow = _iEndRow;strText = null;}}public List<MergeCellsParam> mMergeCells = new List<MergeCellsParam>();#endregion

#region 获取单元格合并所需的行列public void UpdateMergeCells(){mMergeCells.Clear();int Sum = 0;for (int i = 0; i < sql.Upname.Count; i++){if (sql.RootCount[i] > 1){mMergeCells.Add(new MergeCellsParam(0, Sum, 0, Sum + sql.RootCount[i] - 1));mMergeCells.Add(new MergeCellsParam(1, Sum, 1, Sum + sql.RootCount[i] - 1));Sum += sql.RootCount[i];}elseSum++;}}#endregion

#region <<单元格合并>>private void GridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e){for (int i = 0; i < mMergeCells.Count; i++){if (mMergeCells[i].iStartCellRow == mMergeCells[i].iEndCellRow&& mMergeCells[i].iStartCellColumn == mMergeCells[i].iEndCellColumn){return;}var _mergeParam = mMergeCells[i];if (e.ColumnIndex >= _mergeParam.iStartCellColumn && e.ColumnIndex <= _mergeParam.iEndCellColumn&& e.RowIndex >= _mergeParam.iStartCellRow && e.RowIndex <= _mergeParam.iEndCellRow){FindRange(e, this.GridView);}}}#endregion

#region 找到上下行内容相同的行private void FindRange(DataGridViewCellPaintingEventArgs e, DataGridView myGrid){if (e.CellStyle.Alignment == DataGridViewContentAlignment.NotSet){e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;}Brush gridBrush = new SolidBrush(GridView.GridColor);SolidBrush backBrush = new SolidBrush(e.CellStyle.BackColor);SolidBrush fontBrush = new SolidBrush(e.CellStyle.ForeColor);int UpRows = 0;int DownRows = 0;int count = 0;int cellwidth = e.CellBounds.Width;Pen gridLinePen = new Pen(gridBrush);if (e.Value != null){string curValue = e.Value == null ? "" : e.Value.ToString().Trim();//MessageBox.Show("curValue:" + curValue);#region 获取下面的行数for (int i = e.RowIndex; i < myGrid.Rows.Count; i++){if (myGrid.Rows[i].Cells[e.ColumnIndex].Value != null){if (myGrid.Rows[i].Cells[e.ColumnIndex].Value.ToString().Equals(curValue)){//this.Rows[i].Cells[e.ColumnIndex].Selected = this.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected;DownRows++;if (e.RowIndex != i){cellwidth = cellwidth < myGrid.Rows[i].Cells[e.ColumnIndex].Size.Width ? cellwidth : myGrid.Rows[i].Cells[e.ColumnIndex].Size.Width;}}else{break;}}}#endregion#region 获取上面的行数for (int i = e.RowIndex; i > 0; i--){if (myGrid.Rows[i].Cells[e.ColumnIndex].Value != null){if (myGrid.Rows[i].Cells[e.ColumnIndex].Value.ToString().Equals(curValue)){//this.Rows[i].Cells[e.ColumnIndex].Selected = this.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected;UpRows++;if (e.RowIndex != i){cellwidth = cellwidth < myGrid.Rows[i].Cells[e.ColumnIndex].Size.Width ? cellwidth : myGrid.Rows[i].Cells[e.ColumnIndex].Size.Width;}}else{break;}}}count = DownRows + UpRows - 1;if (count < 1){return;}}//if (GridView.Rows[e.RowIndex].Selected)// {//backBrush.Color = e.CellStyle.SelectionBackColor;backBrush.Color = Color.White;fontBrush.Color = e.CellStyle.SelectionForeColor;// }//以背景色填充e.Graphics.FillRectangle(backBrush, e.CellBounds);//画字符串if(e.RowIndex < sql.RootCount[0]){PaintingFont(e, cellwidth, UpRows, DownRows, count-1);}elsePaintingFont(e, cellwidth, UpRows, DownRows, count);if (DownRows == 1){e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);count = 0;}// 画右边线e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom);e.Handled = true;#endregion}#endregion

#region 画字符串// cellwidth = e.CellBounds.Width;// UpRows上面相同的行数// DownRows下面相同的行数// count 总行数private void PaintingFont(System.Windows.Forms.DataGridViewCellPaintingEventArgs e, int cellwidth, int UpRows, int DownRows, int count){SolidBrush fontBrush = new SolidBrush(e.CellStyle.ForeColor);int fontheight = (int)e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font).Height;int fontwidth = (int)e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font).Width;int cellheight = e.CellBounds.Height;if (e.CellStyle.Alignment == DataGridViewContentAlignment.MiddleCenter){e.Graphics.DrawString((String)e.Value, e.CellStyle.Font, fontBrush, e.CellBounds.X + (cellwidth - fontwidth) / 2, e.CellBounds.Y - cellheight * (UpRows - 1) + (cellheight * count - fontheight) / 2);}}#endregion

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。