C# 在C中合并RTL Datagridview列标题#

C# 在C中合并RTL Datagridview列标题#,c#,datagridview,merge,right-to-left,datagridviewcolumn,C#,Datagridview,Merge,Right To Left,Datagridviewcolumn,我想合并3个Datagridview列标题(第3、第4和第5列) 列)并启用Datagridview的RightToleft属性。i用户 此代码: private void PromotionButton_Click(object sender, EventArgs e) { dataGridView1.ColumnHeadersHeight = dataGridView1.ColumnHeadersHeight * 2; dataGridView1.Co

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

列)并启用Datagridview的RightToleft属性。i用户

此代码:

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 < 5; j++)
        {
            Rectangle r1 = dataGridView1.GetCellDisplayRectangle(j, -1, true);
            int w2 = dataGridView1.GetCellDisplayRectangle(j + 1, -1, true).Width;
            r1.X += 1;
            r1.Y += 1;
            r1.Width = r1.Width + w2 - 2;
            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);
        }
void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
    {
        Rectangle rtHeader = dataGridView1.DisplayRectangle;
        rtHeader.Height = dataGridView1.ColumnHeadersHeight / 2;
        dataGridView1.Invalidate(rtHeader);
    }
    void dataGridView1_Scroll(object sender, ScrollEventArgs e)
    {
        Rectangle rtHeader = dataGridView1.DisplayRectangle;
        rtHeader.Height = dataGridView1.ColumnHeadersHeight / 2;
        dataGridView1.Invalidate(rtHeader);

    }

    void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.RowIndex == -1 && e.ColumnIndex > -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;
        }

    }
private void promotion按钮\u单击(对象发送者,事件参数e)
{
dataGridView1.ColumnHeadershight=dataGridView1.ColumnHeadershight*2;
dataGridView1.ColumnHeadersDefaultCellStyle.Alignment=DataGridViewContentAlignment.MiddleCenter;
dataGridView1.CellPaint+=新的DataGridViewCellPaintingEventHandler(dataGridView1_CellPainting);
dataGridView1.Paint+=新的PaintEventHandler(dataGridView1_Paint);
dataGridView1.Scroll+=新的ScrollEventHandler(dataGridView1\u Scroll);
dataGridView1.ColumnWidthChanged+=新的DataGridViewColumnEventHandler(dataGridView1\U ColumnWidthChanged);
}
私有void dataGridView1_Paint(对象发送方,PaintEventArgs e)
{
对于(int j=2;j<5;j++)
{
矩形r1=dataGridView1.GetCellDisplayRectangle(j,-1,true);
int w2=dataGridView1.GetCellDisplayRectangle(j+1,-1,true).Width;
r1.X+=1;
r1.Y+=1;
r1.宽度=r1.宽度+w2-2;
r1.高度=r1.高度/2-2;
e、 Graphics.FillRectangle(新的SolidBrush(dataGridView1.ColumnHeadersDefaultCellStyle.BackColor),r1);
StringFormat格式=新的StringFormat();
format.Alignment=StringAlignment.Center;
format.LineAlignment=StringAlignment.Center;
e、 Graphics.DrawString(“ياضيات”),dataGridView1.ColumnHeadersDefaultCellStyle.Font,
新的SolidBrush(dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor),r1,格式);
}
void dataGridView1\u ColumnWidthChanged(对象发送方,DataGridViewColumnEventArgs e)
{
矩形Rheader=dataGridView1.DisplayRectangle;
rHeader.Height=dataGridView1.ColumnHeadershight/2;
dataGridView1.Invalidate(Rheader);
}
void dataGridView1\u滚动(对象发送方,ScrollEventArgs e)
{
矩形Rheader=dataGridView1.DisplayRectangle;
rHeader.Height=dataGridView1.ColumnHeadershight/2;
dataGridView1.Invalidate(Rheader);
}
void dataGridView1_CellPainting(对象发送方,DataGridViewCellPaintingEventArgs e)
{
如果(e.RowIndex==-1&&e.ColumnIndex>-1)
{
矩形r2=e.CellBounds;
r2.Y+=e.CellBounds.Height/2;
r2.高度=e.CellBounds.Height/2;
e、 PaintBackground(r2,真);
e、 油漆含量(r2);
e、 已处理=正确;
}
}
但结果不是我想要的,是这样的:


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

假设您希望这三列合并为一份合并文本,并且您希望合并索引为2-4的列:

  • 拆下回路
  • 获取所有三个所需列的宽度(而不是列
    j
    j+1
  • 从最左边的列(第4列,而不是第2列)开始矩形,因为网格已启用了
    rightoleft
  • 此外,我建议使用以下对齐方式,以防止标题文本部分受阻:

    dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter;
    

    但是您想要什么结果?它应该是什么样子?结果是合并第3、第4和第5列标题
    dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter;