首页 > 解决方案 > 在c#中合并datagridview中的列

问题描述

我的 c# winforms 上有一个 datagridview,我想合并一些列以在其上输入数据。我该怎么做?

我从网上尝试了一些代码,但有错误,它说:与事件处理程序的委托匹配的 datagridviewCellPainting 没有重载。这是我的代码:

private void General_Inventory_Load(object sender, EventArgs e)
        {

            dgvGenInventory.Columns.Add("JanWin", "Win");
            dgvGenInventory.Columns.Add("JanLoss", "Loss");
            dgvGenInventory.Columns.Add("FebWin", "Win");
            dgvGenInventory.Columns.Add("FebLoss", "Loss");
            dgvGenInventory.Columns.Add("MarWin", "Win");
            dgvGenInventory.Columns.Add("MarLoss", "Loss");
            dgvGenInventory.Columns.Add("AprWin", "Win");
            dgvGenInventory.Columns.Add("AprLoss", "Loss");

            dgvGenInventory.Rows.Add("1", "2", "3", "2", "2", "2", "4", "2");
            for (int i = 0; i < dgvGenInventory.ColumnCount - 1; i++)
            {
                dgvGenInventory.Columns[i].Width = 45;
            }
        this.dgvGenInventory.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
        this.dgvGenInventory.ColumnHeadersHeight = this.dgvGenInventory.ColumnHeadersHeight * 2;
        this.dgvGenInventory.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter;
        this.dgvGenInventory.CellPainting += new DataGridViewCellPaintingEventHandler(dgvGenInventory_CellPainting);
        this.dgvGenInventory.Paint += new PaintEventHandler(dgvGenInventory_Paint);
        this.dgvGenInventory.Scroll += new ScrollEventHandler(dgvGenInventory_Scroll);
        this.dgvGenInventory.ColumnWidthChanged += new DataGridViewColumnEventHandler(dgvGenInventory_ColumnWidthChanged);

        }

        private void dgvGenInventory_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;
            }
        }

我想在我的 datagridview 上看到合并的列

标签: c#

解决方案


我花了很长时间寻找这个,因为我的老板不想购买任何现成的组件。这应该提交到 .NET 代码中:datagridvewtextboxcell-with-span-behaviour 它可以正常工作并且使用起来非常简单。适用于 VB/C# .NET 4.5 到 6。跨行和列,包括标题。

DataGridView.Columns.Add(new DataGridViewTextBoxColumnEx());
var dataGridViewCell = (DataGridViewTextBoxCellEx)DataGridView[colIdx, rowIdx];
dataGridViewCell.ColSpan = 2;
dataGridViewCell.RowSpan = 6;

推荐阅读