Как я могу создавать различные форматы ячеек в Winform DataGridView
У меня есть DataGridView, который я привязываю к DataTable.
DataTable - это все числовые значения.
Требуется, чтобы каждые n строк в DataGridView содержали текст, а не числовые значения (для визуального разделения разделов для пользователя).
Я счастлив поместить эти текстовые данные в DataTable или в DataGridView после привязки, но я не вижу способа поместить эти текстовые данные в любой из них, поскольку форматы столбцов для обоих требуют числовых данных - я получаю сообщение "не могу поместите строку в десятичной "ошибке" для обоих.
Есть идеи, как изменить формат определенной строки или ячейки в DataTable или DataGridView?
Ответов (3)3
Вы можете предоставить обработчик для CellFormatting
события DataGridView , например:
public partial class Form1 : Form
{
DataGridViewCellStyle _myStyle = new DataGridViewCellStyle();
public Form1()
{
InitializeComponent();
_myStyle.BackColor = Color.Pink;
// We could also provide a custom format string here
// with the _myStyle.Format property
}
private void dataGridView1_CellFormatting(object sender,
DataGridViewCellFormattingEventArgs e)
{
// Every five rows I want my custom format instead of the default
if (e.RowIndex % 5 == 0)
{
e.CellStyle = _myStyle;
e.FormattingApplied = true;
}
}
//...
}
Для получения помощи по созданию собственных стилей обратитесь к соответствующему DataGridView.CellFormatting Event
разделу онлайн-справки.
Я использовал Janus GridEx для такого нестандартного поведения. (Отчасти потому, что он делает гораздо больше, чем просто это, например группирование и суммирование, просмотр карточек и т. Д.) На веб-сайте есть несколько хороших демонстраций.
(Это не коммерческое предложение; у меня просто был хороший опыт использования их компонента.)
(источник: janusys.com )
Решает ли это вашу проблему?
// Set the data source.
dataGridView1.DataSource = dataTable1;
// Create a new text box column.
DataGridViewColumn c1 = new DataGridViewTextBoxColumn();
const string C1_COL_NAME = "Custom1";
c1.Name = C1_COL_NAME;
// Insert the new column where needed.
dataGridView1.Columns.Insert(1, c1);
// Text can then be placed in the rows of the new column.
dataGridView1.Rows[0].Cells[C1_COL_NAME].Value = "Some text...";
Привязки исходных таблиц данных должны по-прежнему существовать.