Как суммировать значения строк по цвету фона - PullRequest
0 голосов
/ 23 апреля 2019

В каждом ряду ячейки выделены цветом фона (три имени в строке).Я хочу, чтобы сумма значений по цвету фона (не содержимое ячейки).Даже после различных попыток я должен признать, что понятия не имею, как заполнить 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);

DGV with 3 Cells highlighted per row and a ListBox

1 Ответ

0 голосов
/ 23 апреля 2019

Я думаю, что это сделает то, что вы просили.Для каждой строки подсчитываются все ячейки с цветом фона 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}"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...