#c# #datagridview
#c# #datagridview
Вопрос:
В каждой строке ячейки выделяются цветом фона (по три имени в строке). Я хочу получить сумму значений по цвету фона (а не по содержимому ячейки). Даже после различных попыток я должен признать, что понятия не имею, как заполнить ListBox
именами (учитель, ученики) и суммой каждой строки в ListBox
(см. Следующий код …) Если сумма равна 3, то запись в ListBox
должна отображаться с соответствующим именем. Результат в ListBox
должен выглядеть так, как показано ниже:
3; Teacher
3; Students
int sum = 0;
{
for (int i = 0; i <= dataGridView2.Columns.Count - 1; i )
{
sum = Convert.ToInt32(dataGridView2.Rows[0].Cells[i].Style.BackColor == Color.YellowGreen);
if (sum == 3)
{
sum ;
listBox9.Items.Add(sum);
listBox9.ForeColor = Color.DarkCyan;
listBox9.Font = new Font("Georgia", 16);
Комментарии:
1. Спасибо за вашу помощь, «OhBeWise»
Ответ №1:
Я думаю, это сделает то, о чем вы просили. Для каждой строки он подсчитывает все ячейки с фоновым цветом YellowGreen и связывает имя строки (т. Е. Имя в вашем примере — «учителя» и «студенты», как указано в столбце с заголовком «DD»).
// Setup the DataGridView as in your example
var dgv = new DataGridView();
dgv.Columns.Add("s1", "s1");
dgv.Columns.Add("s2", "s2");
dgv.Columns.Add("s3", "s3");
dgv.Columns.Add("s4", "s4");
dgv.Columns.Add("s5", "s5");
dgv.Columns.Add("s6", "s6");
dgv.Columns.Add("DD", "DD");
dgv.Rows.Add("Fiona", "Lila", "Ben", "Ella", "Leon", "John", "Teachers");
dgv.Rows.Add("Jack", "Luke", "Fiona", "Sophie", "Lila", "Leon", "Students");
dgv.AllowUserToAddRows = false;
dgv.Rows[0].Cells[0].Style.BackColor = Color.YellowGreen;
dgv.Rows[0].Cells[1].Style.BackColor = Color.YellowGreen;
dgv.Rows[0].Cells[4].Style.BackColor = Color.YellowGreen;
dgv.Rows[1].Cells[2].Style.BackColor = Color.YellowGreen;
dgv.Rows[1].Cells[4].Style.BackColor = Color.YellowGreen;
dgv.Rows[1].Cells[5].Style.BackColor = Color.YellowGreen;
// Query the DataGridView, counting each row's cells with the YellowGreen background color, correlating with the row name stored in the DD column
var sums = dgv.Rows.Cast<DataGridViewRow>()
.Select(row => new {
Name = row.Cells[row.Cells.Cast<DataGridViewCell>().First(cell => cell.OwningColumn.HeaderText == "DD").ColumnIndex].Value ,
Count = row.Cells.Cast<DataGridViewCell>().Count(c => c.Style.BackColor == Color.YellowGreen)})
.ToList();
// Add the counts for each row to the ListView
var lb = new ListBox();
sums.ForEach(s => lb.Items.Add($"{s.Name}: {s.Count}"));
Комментарии:
1. большое вам спасибо за все усилия и отличный пример!! код выполнен! возможно ли практически отображать только учителей или студентов в списке? (оба имени и счетчики не должны отображаться ) результат в списке должен выглядеть так, как показано ниже 3; Учителя или 3; студенты. большое вам спасибо «Carlo Bos»!!!