2015-11-18 3 views
0

Я искать способ сделать некоторые изменения в DataGridView в C# показано на рисунке: Current DatagridviewC# DataGridView визуальные настройки

Она состоит из двух столбцов и в этом случае 6 рядов.

Это должен быть контрольный список, который вы читаете: «Аккумулятор .... ВКЛ» и так далее. Чтобы получить точки между левым и правым столбцами, я просто добавляю много точек после и перед каждой строкой.

строка

Аккумулятор выглядит следующим образом:

"BATTERY...............................". 

«ON» строка на правой колонке будет выглядеть следующим образом:

"..............ON" 

Как вы можете видеть, все еще существует разрыв между точки, как я могу избавиться от этого? CellBorderStyle IST набор для:

checklist_dataGridView.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal; 

Кроме того, есть небольшая разница по высоте между левой и правой колонке, это результат

checklist_dataGridView.Columns[1].DefaultCellStyle.WrapMode = DataGridViewTriState.True; 

Это предполагается сделать правильный текст столбца идти справа налево.

Без этого, правая колонка будет показывать только «...........................»

Есть ли лучше способ правильно выровнять?

Спасибо за вашу помощь

Axel R

Edit: Я решил эту проблему, сделав один столбец и простого подсчета ширины строки. Если строка не достигла ширины столбца, в строке будет добавлена ​​одна точка. Это очень хорошо для меня.

+0

Спасибо за ответы, но не очень приятно (пока). Разве нет лучшего способа? –

ответ

0

Вы можете приблизиться к макету, который вы хотите, используя пользовательскую клеточную роспись линий сетки. Вы можете настраивать нижние линии сетки как зеленую пунктирную линию и пропускать добавление точек к значениям ячейки. Единственное отличие состоит в том, что линии будут проходить по всей сетке горизонтально.

Сначала убедитесь, что левая колонка слева внизу выровнена, а правая колонка справа внизу выровнена:

checklist_dataGridView.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomLeft; 
checklist_dataGridView.Columns[0].DefaultCellStyle.ForeColor = System.Drawing.Color.LightGreen; 

checklist_dataGridView.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight; 
checklist_dataGridView.Columns[1].DefaultCellStyle.ForeColor = System.Drawing.Color.LightGreen; 

Обычая окрашивать клетки с пунктирной зеленой линией внизу, вы можете реализовать DataGridView CellPainting обработчик:

private void checklist_dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if (e.RowIndex > -1) 
    { 
     e.Handled = true; 
     e.Graphics.FillRectangle(System.Drawing.Brushes.Black, e.CellBounds);     

     using (Pen p = new Pen(Brushes.LightGreen)) 
     { 
      p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; 
      e.Graphics.DrawLine(p, new Point(0, e.CellBounds.Bottom - 1), new Point(e.CellBounds.Right, e.CellBounds.Bottom - 1)); 
     } 

     e.PaintContent(e.ClipBounds); 
    } 
} 
0

к сожалению ... вы не можете избавиться от разрыва, потому что checklist_dataGridView.DefaultCellStyle.Padding = new Padding(0, 0, 0, 0); не принимает отрицательные значения.

Теперь, чтобы сделать ваш исходный код работы, я просто добавлю пробел в пространстве dot, например, «...». Таким образом, вы не видите только точки в ячейке, и текст будет обернут вокруг. Также, если вы закончите с точкой в ​​левой ячейке и начнете с точки на правой ячейке, тогда пробел будет близок к пространственному расстоянию, и он будет менее заметным.

Не забывайте об этом, чтобы ваш текст обертывания:

checklist_dataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 
checklist_dataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True; 
Смежные вопросы