C# Datagridview 方法 Rows.Add 工作不正确 - 它在前一个而不是最后添加行

C# Datagridview method Rows.Add works incorrectly - it add line on previous, not on last

我对 datagridview.Rows.Add 方法有疑问。我想添加一个新行,但在最后一行,而不是在前一行。我不知道为什么 Add 方法在这种情况下不起作用。我的代码:

        dataGridView1.RowCount = 3;
        dataGridView1.ColumnCount = 4;

        dataGridView1.Rows[0].Cells[0].Value = 1;
        dataGridView1.Rows[0].Cells[1].Value = 2;
        dataGridView1.Rows[0].Cells[2].Value = 3;
        dataGridView1.Rows[0].Cells[3].Value = 4;

        dataGridView1.Rows[1].Cells[0].Value = 5;
        dataGridView1.Rows[1].Cells[1].Value = 6;
        dataGridView1.Rows[1].Cells[2].Value = 7;
        dataGridView1.Rows[1].Cells[3].Value = 8;

        dataGridView1.Rows[2].Cells[0].Value = 9;
        dataGridView1.Rows[2].Cells[1].Value = 10;
        dataGridView1.Rows[2].Cells[2].Value = 11;
        dataGridView1.Rows[2].Cells[3].Value = 12;


        dataGridView1.Rows.Add(13,14,15,16);

结果:

如果有任何帮助或建议,我将非常高兴!

这是在网格视图中插入线条的正确方法:

dataGridView1.Rows.Add(13,14,15,16);

最后一行*号其实是换行的占位符,最好不要直接插入

更好的办法是在输入新行时不设置 RowCount。所以如果打开备用阅读。

在下面的示例中没有断言来验证 row.Cells[3].Value 是一个 int 但在第二个块中显示了如何正确检查。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        dataGridView1.ColumnCount = 4;

        for (int index = 0; index < dataGridView1.Columns.Count; index++)
        {
            dataGridView1.Columns[index].HeaderText = $"Column {index +1}";
        }

        dataGridView1.Rows.Add(1, 2, 3, 4);

    }

    private void button1_Click(object sender, EventArgs e)
    {

        if (dataGridView1.Rows.Count == 1)
        {
            dataGridView1.Rows.Add(1, 2, 3, 4);
        }

        for (int index = 0; index < 4; index++)
        {
            var row = dataGridView1.Rows.Cast<DataGridViewRow>()
                .LastOrDefault(gridRow => !gridRow.IsNewRow);

            var lastValue = Convert.ToInt32(row.Cells[3].Value) + 1;

            dataGridView1.Rows.Add(
                lastValue, 
                lastValue += 1, 
                lastValue += 1, 
                lastValue += 1);
        }

    }
}

断言单元格值可以表示一个int

for (int index = 0; index < 4; index++)
{
    var row = dataGridView1.Rows.Cast<DataGridViewRow>()
        .LastOrDefault(gridRow => !gridRow.IsNewRow);

    if (int.TryParse(row.Cells[3].Value.ToString(), out var lastValue))
    {
        lastValue  += 1;

        dataGridView1.Rows.Add(
            lastValue,
            lastValue += 1,
            lastValue += 1,
            lastValue += 1);
    }

}