You must Sign In to post a response.
  • Category: .NET

    Merge Two Cells of Datagridview in VB.NET 2005

    The forum thread has not been reviewed by Editors yet. Readers are advised to use their best judgement before accessing this thread.
    This thread will be reviewed shortly.
    If you think this thread contain inappropriate content, please report to webmaster.
    Merge Two Cells of Datagridview in VB.NET 2005

    thanks and regards,
    Sunshine
  • #111174
    Here is a class that may do what you need.

     
    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
    }



    The following link has a sample project ZIP file available for download.
    http://www.codeguru.com/forum/showthread.php?p=1537635#post1537635


  • This thread is locked for new responses. Please post your comments and questions as a separate thread.
    If required, refer to the URL of this page in your new post.