如何删除一行并更新其余的某个单元格?

时间:2018-09-19 00:39:42

标签: c# datagridview

enter image description here

我想做的是,如果我单击 delete (删除)按钮,则会删除整行(例如第1行)。然后,当删除该行时,其余行将在删除行的值之前更新其“ ID”。

例如,我删除 Row 1 Row2的 ID 将变为1,而 Row 3的 ID 将变为2。

这是我到目前为止尝试过的:

private void btn_Delete_Click(object sender, EventArgs e)
    {
        string type = (string)dgv_Layers.CurrentRow.Cells[1].Value;
        int index = (int)dgv_Layers.CurrentRow.Cells[0].Value;
        //MessageBox.Show(index.ToString());
        if(type == "R")
        {
            index--;
            //draw._rectangles.RemoveAt(index);
            dgv_Layers.Rows.RemoveAt(index);
            counter--;
            for(int i =0; i < dgv_Layers.Rows.Count; i++)
            {
                index++;
                dgv_Layers.Rows[i].Cells[0].Value = index;
            }
        }
        }

更新

更新了代码。我可以删除最上面的部分并更新剩余的行吗?我现在的问题是当我在两者之间删除时第3行,这些行更新,并且ID从3开始。我希望它从1开始;

1 个答案:

答案 0 :(得分:1)

这是因为您使用的索引值已经是3。

int index = (int)dgv_Layers.CurrentRow.Cells[0].Value; //index=3, when you delete 3rd row

,然后在您的循环中,您这样做-

if(type == "R")
    {
        index--; //2
        //draw._rectangles.RemoveAt(index);
        dgv_Layers.Rows.RemoveAt(index);
        counter--;
        for(int i =0; i < dgv_Layers.Rows.Count; i++)
        {
            index++; //3
            dgv_Layers.Rows[i].Cells[0].Value = index; //3
        }
    }

无需在此处使用索引值。您应该像这样使用此循环-

for(int i =0; i < dgv_Layers.Rows.Count; i++)
            {

                dgv_Layers.Rows[i].Cells[0].Value = i+1; 
            }

这将从1开始的值。

或者您也可以这样-

for( ; index< dgv_Layers.Rows.Count; index++)
{
    dgv_Layers.Rows[index].Cells[0].Value = index+1;
}