У меня есть следующая ячейка, которая используется для моего пользовательского типа данных столбца в моей сетке данных.
public class DataGridViewReviewerCell : DataGridViewCell
{
protected override object GetFormattedValue(object value, int rowIndex, ref DataGridViewCellStyle cellStyle,
TypeConverter valueTypeConverter,
TypeConverter formattedValueTypeConverter,
DataGridViewDataErrorContexts context)
{
return 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)
{
base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, "", "", errorText,
cellStyle, advancedBorderStyle, paintParts);
var parent = (DataGridViewReviewerColumn) OwningColumn;
var columnValue = (ReviewerCheckBox) Value;
CheckBoxRenderer.DrawCheckBox(
graphics,
new Point(cellBounds.X + 4, cellBounds.Y + 4),
new Rectangle(cellBounds.X + 2, cellBounds.Y + 4, cellBounds.Width, cellBounds.Height - (4 * 2)),
" " + columnValue.ReviewerEmployeeName,
parent.InheritedStyle.Font,
TextFormatFlags.Left,
false,
(columnValue.IsChecked ? CheckBoxState.CheckedNormal : CheckBoxState.UncheckedNormal));
}
}
Этот класс работает, как и ожидалось, однако каждый раз, когда Paint () вызывается как текст (в настоящее время " " + columnValue.ReviewerEmployeeName
), он становится слоистым, создавая очень нечитаемый текст. Кажется, я не могу найти ничего, что решило бы эту проблему.
Медленный код
Вот фрагмент кода, который работает очень медленно. Когда я переключаю это в режим отладки, кажется, что он работает бесконечно.
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
using System;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dataGridView1.Rows.Add("STEP A", new ReviewerCheckBox());
dataGridView1.Rows.Add("STEP B", new ReviewerCheckBox());
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex == -1 || e.ColumnIndex != 1) return;
var cell = (ReviewerCheckBox) dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
cell.IsChecked = !cell.IsChecked;
cell.ReviewerEmployeeName = (cell.IsChecked ? Environment.UserName : String.Empty);
//MessageBox.Show("Testing");
}
}
public class ReviewerCheckBox
{
public string ReviewerEmployeeName { get; set; }
public bool IsChecked { get; set; }
public bool IsRequired { get; set; }
}
}
public class DataGridViewReviewerColumn : DataGridViewColumn
{
public DataGridViewReviewerColumn()
{
CellTemplate = new DataGridViewReviewerCell();
ReadOnly = false;
SortMode = DataGridViewColumnSortMode.NotSortable;
Resizable = DataGridViewTriState.False;
}
}