如何将列表中包含数据的列和行插入到 DataGridView(C#,Windows 窗体)

How to insert columns and rows with data in Lists into DataGridView (C# , Windows Forms)

此项目基于 Windows Forms (.NET Framework),C#。

假设我有 3 个列表,其值分别命名为;

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

其中已经填充了数据。我的目标是将这些列表中的数据插入到 DataGridView;分为两列参数(传球,速度,...)和重量(1、4,...)和一行替代方案(Player1,Player2,...),如下所示。 Alternatives 下的数字稍后将手动插入到 DataGridView(用鼠标单击单元格并写入数字),这将用于使用 Weight 参数计算总分。

+------------+--------+--------+--------+------ --+
|参数 |重量 |玩家1 |玩家2 |玩家3 |
+------------+--------+--------+--------+------ --+
|通过 | 1 | 2 | 3 | 10 |
|速度 | 4 | 8 | 10 | 2 |
|年龄 | 3 | 1 | 9 | 3 |
|射击 | 8 | 4 | 1 | 4 |
+------------+--------+--------+--------+------ --+
|总计 |--------| | | |
+------------+--------+--------+--------+------ --+

我认为我可以通过操作列表进行计算,但我无法插入数据。问题是我尝试使用下面的代码导入数据,但由于索引问题没有成功。

        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);
        }

额外问题;

在 table 中已有数据后,如果我想手动更改权重属性(在 DataGridView 中单击它们并写入新值),会有任何问题吗?我的目标是创建一些包含许多不同值的图表。我一直在想,如果我只是循环 DataGridView 并将数据放入新列表中——我是否能够使用它们高效地创建图表?谢谢大家的回答

请尝试以下代码,如有错误请返回。

   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();
        }