dataGridView1.Columns.Add(new DataGridViewRatingColumn(){
// свойства DataGridViewRatingColumn можно инициализировать здесь...
});
// Чтобы изменить ReadOnly, которое позволяет пользователю писать или нет, вам нужно
// сначала преобразовать столбец в DataGridViewRatingColumn, это поведение вызвано
// ненормальным поведением переопределения ReadOnly (поэтому пришлось использовать новый).
((DataGridViewRatingColumn)dataGridView1.Columns[0]).ReadOnly = true; (default by false)
// также вы должны включить DoubleBuffered в DataGridView для устранения мерцания
typeof(Control).GetProperty("DoubleBuffered",
System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.SetValue(dataGridView1, true, null);
在 big SO的开放空间上,找到了与您的问题类似的答案,并且是一个相当不错的答案。问题听起来像这样:“Using a custom control in a DataGridView”(在DataGridView中使用自定义控件)。事实上,源链接:Using a custom control in a DataGridView and the answer translation of the answer into Russian:
首先你需要计算显示单元格的总数,你需要一个列表
List<YourControl>来保存所有必要的控件。这些控件应该有自己DataGridView喜欢的Parent。这些元素的数量必须等于显示的单元格数量。然后,在事件处理程序中,CellPainting您必须更新列表中所有控件的位置。在事件处理程序中,让我们CellPainting添加更新代码,因为每当更新单元格值和边框时,它CellPainting都会运行并更新控件Location。这个过程有点复杂,但它有效。您可以使用属性将每个控件绑定到每个单元格reference,例如作为Tag属性的元素。一种方法。您只需要创建一个
DataGridViewCell可用作CellTemplate常规DataGridViewColumn. 下面有相当多的代码:注意:两个类
DataGridViewRatingColumn必须DataGridViewRatingCell放在同一个文件中,因为里面有一个静态方法声明UpdateBrushes在DataGridViewRatingCell类中使用DataGridViewRatingColumn。如果您想将它们放在单独的文件中,您可以更改访问修饰符。查看提供的类、属性和方法 - 它们的名称不言而喻。它们可用于自定义控件(星号)的外观。显示用法的代码示例:可能翻译的不够完善,提前致歉。最主要的是答案的本质是明确的,并且对所有内容都进行了详细说明。代码中的小注释没有翻译。