Как вставить столбцы и строки с данными в списках в DataGridView (C#, Windows Forms) - PullRequest
0 голосов
/ 02 апреля 2020

Этот проект основан на Windows формах (. NET Framework), C#.

Допустим, у меня есть 3 списка с именами соответственно;

List<string> ListAlternatives = new List<string>();
List<string> ListParameters = new List<string>();
List<int> ListWeight = new List<int>();

Которые уже заполнены данными. Моя цель - вставить данные из этих списков в DataGridView ; в два столбца Параметры (Passing, Speed, ...) и Вес (1, 4, ...) и один ряд Альтернатив (Player1, Player2, ...), как показано ниже. Числа в разделе «Альтернативы» будут позже вставлены вручную в DataGridView (щелкнув мышью по ячейке и записав число), который будет использоваться для расчета общего балла с использованием параметра «Вес».

+------------+--------+---------+---------+---------+
| Parameters | Weight | Player1 | Player2 | Player3 |
+------------+--------+---------+---------+---------+
| Passing    | 1      | 2       | 3       | 10      |
| Speed      | 4      | 8       | 10      | 2       |
| Age        | 3      | 1       | 9       | 3       |
| Shooting   | 8      | 4       | 1       | 4       |
+------------+--------+---------+---------+---------+
| Total      |--------|         |         |         |
+------------+--------+---------+---------+---------+

Я рассчитывал что я буду в состоянии делать вычисления, манипулируя списками, но я не смог вставить данные. Проблема в том, что я пытался импортировать данные, используя приведенный ниже код, но безуспешно из-за проблем с индексами.

        dataGridView1.Columns.Add("ParameterColumn", "Parameters");

        for (int i = 0; i < ListParameters.Count(); i++)
        {
            DataGridViewRow row = new DataGridViewRow();
            row.CreateCells(dataGridView1);
            row.Cells[0].Value = ListParameters[i];
            dataGridView1.Rows.Add(row);
        }

        foreach (var item in ListAlternatives)
        {
            dataGridView1.Columns.Add(item, item);
        }

Дополнительные вопросы;

Будут ли проблемы, если я захочу вручную изменить атрибуты Weight (нажав на них в DataGridView и записать новое значение) после того, как у меня уже есть данные в таблице? Моя цель - создать несколько диаграмм, состоящих из множества разных значений. Я думал, что если я просто oop DataGridView и добавлю данные в новые списки - смогу ли я эффективно создавать диаграммы с ними? Спасибо за все ответы

1 Ответ

0 голосов
/ 02 апреля 2020

Пожалуйста, попробуйте следующий код и вернитесь назад для любых ошибок.

   dataGridView1.Columns.Add("ParameterColumn", "Parameters");
   dataGridView1.Columns.Add("WeightColumn", "Weight");

    for (int i = 0; i < ListAlternatives.Count(); i++)
    {
        dataGridView1.Columns.Add("Player" + i.ToString() + "Column", "Player " + i.ToString());
    }

    for (int i = 0; i < ListParameters.Count(); i++)
    {
        dataGridView1.Rows.Add(ListParameters[i], ListWeight[i]);
    }

    dataGridView1.Rows.Add("Total");

    dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[1].Value = ListWeight.Sum();//This is for getting sum of weights

РЕДАКТИРОВАТЬ:

Добавьте следующую строку вне события, например, выше private void button1_click:

List<int> multiples = new List<int>();

Введите этот код для события нажатия кнопки, для которой необходимо рассчитать значения:

        dataGridView1.AllowUserToAddRows = false;
        foreach (DataGridViewColumn col in dataGridView1.Columns.Cast<DataGridViewColumn>().Skip(2))
        {
            for (int i = 0; i < dataGridView1.RowCount - 1; i++)
            {
                int multiple = Convert.ToInt32(dataGridView1.Rows[i].Cells[1].Value) * Convert.ToInt32(dataGridView1.Rows[i].Cells[col.Index].Value);
                multiples.Add(multiple);
                multiple = 0;
            }
            dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[col.Index].Value = multiples.Sum();
            multiples.Clear();
        }
...