为什么我填充的DataGridView单元格(DataGridViewTextBoxCell实例)显示省略号点?

时间:2012-08-27 23:18:19

标签: c# winforms datagridview formatting datagridviewtextboxcell

当我使用值(例如“1”)填充DataGridView中的选定单元格而不是简单地显示“1”时,它们显示“1 ...”

为什么会出现这种情况,如何防止省略号点显示?

更新

这是请求的代码(如下)。它看起来像是一个尖叫镜头(暂停,由于某种原因,后来并不接受它作为一个点凹凸或一个尖峰钉)。

无论如何,DGV看起来像这样:

00:00 | 1...
00:15 | 
00:30 | 1...
00:45 | 1...

......应该是:

00:00 | 1
00:15 | 
00:30 | 1
00:45 | 1

如最后一行的评论中所述,电话值与测试数据的关系仅为“1”。将鼠标悬停在该值上会显示工具提示/提示“1”(不是“1 ......”或其他一些)。

private void CreateAndPopulateDGVPlatypusScheduleCells()
{
    // Add the needed columns
    if (dataGridViewPlatypusSchedule.Columns.Count == 0) {
        for (int i = 0; i < PLATYPUS_SCHEDULE_COL_COUNT; i++) {
            string colName = string.Format("Column{0}", i + 1);
            dataGridViewPlatypusSchedule.Columns.Add(colName, colName);
            dataGridViewPlatypusSchedule.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
            dataGridViewPlatypusSchedule.Columns[i].Resizable = DataGridViewTriState.False;

            DataGridViewCell cell = new DataGridViewTextBoxCell();
            if (i % 4 == 0) {
                cell.Style.BackColor = Color.Bisque;
                dataGridViewPlatypusSchedule.Columns[i].CellTemplate = cell;
                dataGridViewPlatypusSchedule.Columns[i].Width = 41;
                dataGridViewPlatypusSchedule.Columns[i].ReadOnly = true;
            } else {
                cell.Style.BackColor = Color.White;
                dataGridViewPlatypusSchedule.Columns[i].CellTemplate = cell;
                dataGridViewPlatypusSchedule.Columns[i].Width = 13;
                dataGridViewPlatypusSchedule.Columns[i].ReadOnly = false;
            }
        }
    }

    // Add the needed rows
    if (dataGridViewPlatypusSchedule.Rows.Count == 0)
    {
        for (int row = 0; row < PlatypusScheduleGridRowCount; row++) {
            // Save each row as an array
            string[] currentRowContents = new string[PLATYPUS_SCHEDULE_COL_COUNT];
            // Add each column to the currentColumn
            for (int col = 0; col < PLATYPUS_SCHEDULE_COL_COUNT; col++)
            {
                currentRowContents[col] = this.GetPlatypusScheduleTimeStringForCell(row, col);
            }
            // Add the row to the DGV
            dataGridViewPlatypusSchedule.Rows.Add(currentRowContents);
        }
    }

    int dow = this.GetDOWAsInt(ActiveDow);
    listQHduckBill = InterpSchedData.GetPlatypusScheduleForFunnyMammal(platypusId, dow);
    foreach (var duckBill in listQHduckBill)
    {
        int QHCell = duckBill.QH;
        string ph1 = duckBill.PH1;
        string ph2 = duckBill.PH2;
        string ph3 = duckBill.PH3;
            if (!(string.IsNullOrWhiteSpace(ph1)))
        {
            PopulatePlatypusScheduleCell(QHCell, 1, ph1);
        }
        if (!(string.IsNullOrWhiteSpace(ph2))) {
            PopulatePlatypusScheduleCell(QHCell, 2, ph2);
        }
        if (!(string.IsNullOrWhiteSpace(ph3))) {
            PopulatePlatypusScheduleCell(QHCell, 3, ph3);
        }
    }
}

private void PopulatePlatypusScheduleCell(int cellToPopulate, int offset, string phoneVal)
{
    int timeColumnBase = (cellToPopulate / PLATYPUS_SCHEDULE_COL_COUNT);
    string colName = this.GetColumnToPopulate(timeColumnBase, offset);
    int rowToPopulate = GetRowToPopulate(cellToPopulate);
    DataGridViewRow dgvr = dataGridViewPlatypusSchedule.Rows[rowToPopulate];
    dgvr.Cells[colName].Value = phoneVal; // <- This (phoneVal) is "1" but displays as "1..."
}

1 个答案:

答案 0 :(得分:0)

我使用了引用的msdn代码,但是并入了StringFormat对象并用黑色(用于内容字体)和blanchedalmond替换了花哨的深红色和蓝色,以与我的网格混合。我在msdn代码中更改的三件事是注释/注释:

private void dataGridViewLifeSchedule_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) {
    // 1. This is used to replace what is StringFormat.GenericDefault in the msdn code with strFormat
    StringFormat strFormat = new StringFormat();
    strFormat.Trimming = StringTrimming.None; 

    Rectangle newRect = new Rectangle(e.CellBounds.X + 1,
    e.CellBounds.Y + 1, e.CellBounds.Width - 4,
    e.CellBounds.Height - 4);

    using (
        Brush gridBrush = new SolidBrush(this.dataGridViewLifeSchedule.GridColor),
        backColorBrush = new SolidBrush(e.CellStyle.BackColor)) {
        using (Pen gridLinePen = new Pen(gridBrush)) {
            // Erase the cell.
            e.Graphics.FillRectangle(backColorBrush, e.CellBounds);

            // Draw the grid lines (only the right and bottom lines; 
            // DataGridView takes care of the others).
            e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,
                e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,
                e.CellBounds.Bottom - 1);
            e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                e.CellBounds.Top, e.CellBounds.Right - 1,
                e.CellBounds.Bottom);

            // Draw the inset highlight box.
            e.Graphics.DrawRectangle(Pens.BlanchedAlmond, newRect); // 2. It is Pens.Blue in the msdn code

            // Draw the text content of the cell, ignoring alignment. 
            if (e.Value != null) {
                e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,
                    Brushes.Black, e.CellBounds.X + 2, // 3. It is Brushes.Crimson in the msdn code
                    e.CellBounds.Y + 2, strFormat);
            }
            e.Handled = true;
        }
    }
}