gpt4 book ai didi

c# - 合并数据 GridView 中的单元格

转载 作者:太空狗 更新时间:2023-10-29 22:35:11 31 4
gpt4 key购买 nike

有没有办法在 winforms 中合并 .net 的 datagridview 中的单元格。我想合并一行中的两个或多个单元格。

最佳答案

您必须自己实现 OnPaint 事件。下面提供了一个例子。您也可以查看 SourceGrid

链接已失效,因此从网络缓存中提取代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Drawing.Drawing2D;


namespace DataGridView_MergeDemo
{
public class HMergedCell : DataGridViewTextBoxCell
{
private int m_nLeftColumn = 0;
private int m_nRightColumn = 0;

/// <summary>
/// Column Index of the left-most cell to be merged.
/// This cell controls the merged text.
/// </summary>
public int LeftColumn
{
get
{
return m_nLeftColumn;
}
set
{
m_nLeftColumn = value;
}
}

/// <summary>
/// Column Index of the right-most cell to be merged
/// </summary>
public int RightColumn
{
get
{
return m_nRightColumn;
}
set
{
m_nRightColumn = value;
}
}

protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
{
try
{
int mergeindex = ColumnIndex - m_nLeftColumn;
int i;
int nWidth;
int nWidthLeft;
string strText;

Pen pen = new Pen(Brushes.Black);

// Draw the background
graphics.FillRectangle(new SolidBrush(SystemColors.Control), cellBounds);

// Draw the separator for rows
graphics.DrawLine(new Pen(new SolidBrush(SystemColors.ControlDark)), cellBounds.Left, cellBounds.Bottom - 1, cellBounds.Right, cellBounds.Bottom - 1);

// Draw the right vertical line for the cell
if (ColumnIndex == m_nRightColumn)
graphics.DrawLine(new Pen(new SolidBrush(SystemColors.ControlDark)), cellBounds.Right - 1, cellBounds.Top, cellBounds.Right - 1, cellBounds.Bottom);

// Draw the text
RectangleF rectDest = RectangleF.Empty;
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
sf.Trimming = StringTrimming.EllipsisCharacter;

// Determine the total width of the merged cell
nWidth = 0;
for (i = m_nLeftColumn; i <= m_nRightColumn; i++)
nWidth += this.OwningRow.Cells[i].Size.Width;

// Determine the width before the current cell.
nWidthLeft = 0;
for (i = m_nLeftColumn; i < ColumnIndex; i++)
nWidthLeft += this.OwningRow.Cells[i].Size.Width;

// Retrieve the text to be displayed
strText = this.OwningRow.Cells[m_nLeftColumn].Value.ToString();

rectDest = new RectangleF(cellBounds.Left - nWidthLeft, cellBounds.Top, nWidth, cellBounds.Height);
graphics.DrawString(strText, new Font("Arial", 10, FontStyle.Regular), Brushes.Black, rectDest, sf);
}
catch (Exception ex)
{
Trace.WriteLine(ex.ToString());
}
}

}// class
}

https://forums.codeguru.com/showthread.php?415930-DataGridView-Merging-Cells

关于c# - 合并数据 GridView 中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2063951/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com