在C#中合并RTL Datagridview列标题

我想合并3个Datagridview列标题(第3个,第4个和第5个)

列)和Datagridview的RightToleft属性已启用。 我是用户

这段代码:

private void PromotionButton_Click(object sender, EventArgs e) { dataGridView1.ColumnHeadersHeight = dataGridView1.ColumnHeadersHeight * 2; dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; dataGridView1.CellPainting += new DataGridViewCellPaintingEventHandler(dataGridView1_CellPainting); dataGridView1.Paint += new PaintEventHandler(dataGridView1_Paint); dataGridView1.Scroll += new ScrollEventHandler(dataGridView1_Scroll); dataGridView1.ColumnWidthChanged += new DataGridViewColumnEventHandler(dataGridView1_ColumnWidthChanged); } private void dataGridView1_Paint(object sender, PaintEventArgs e) { for (int j = 2; j  -1) { Rectangle r2 = e.CellBounds; r2.Y += e.CellBounds.Height / 2; r2.Height = e.CellBounds.Height / 2; e.PaintBackground(r2, true); e.PaintContent(r2); e.Handled = true; } } 

但结果不像我想要的那样,就像这样:

在此处输入图像描述

那么如何解决这个问题呢?

假设您希望这三列仅与合并文本的一个打印合并,并且您希望合并索引为2-4的列:

  1. 删除循环。
  2. 获取所有三个所需列的宽度(而不是列jj+1
  3. 因为您的网格启用了RightToLeft ,所以在最左侧的列(第4列,而不是2)中启动矩形。
 private void dataGridView1_Paint(object sender, PaintEventArgs e) { Rectangle r1 = dataGridView1.GetCellDisplayRectangle(4, -1, true); int w2 = dataGridView1.GetCellDisplayRectangle(3, -1, true).Width; int w3 = dataGridView1.GetCellDisplayRectangle(2, -1, true).Width; r1.X += 1; r1.Y += 1; r1.Width = r1.Width + w2 + w3; r1.Height = r1.Height / 2 - 2; e.Graphics.FillRectangle(new SolidBrush(dataGridView1.ColumnHeadersDefaultCellStyle.BackColor), r1); StringFormat format = new StringFormat(); format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; e.Graphics.DrawString("رياضيات", dataGridView1.ColumnHeadersDefaultCellStyle.Font, new SolidBrush(dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor), r1, format); } 

另外,我建议使用以下对齐方式来防止标题文本出现部分阻塞:

 dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter; 

合并细胞的筛选