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

C# 如何删除一行并更新其余行中的某个单元格?,c#,datagridview,C#,Datagridview,我想做的是,如果我单击一个删除按钮,整行将被删除(例如第1行)。然后,当它被删除时,其余的行将在删除行的值之前更新它的“ID” 例如,我删除第1行,第2行的ID将变为1,第3行的ID将变为2 以下是我迄今为止所做的尝试: private void btn_Delete_Click(object sender, EventArgs e) { string type = (string)dgv_Layers.CurrentRow.Cells[1].Value;

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

例如,我删除第1行,第2行的ID将变为1,第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;
            }
        }
        }
      
private void btn\u Delete\u单击(对象发送者,事件参数e)
{
字符串类型=(字符串)dgv_Layers.CurrentRow.Cells[1]。值;
int index=(int)dgv_Layers.CurrentRow.Cells[0].Value;
//Show(index.ToString());
如果(类型=“R”)
{
索引--;
//绘制._矩形.删除(索引);
dgv_Layers.Rows.RemoveAt(索引);
计数器--;
对于(int i=0;i
更新


更新了代码。完成了可以删除最上面部分并更新其余行的部分。我现在的问题是当我删除中间的行时,例如第3行,行更新,ID从第3行开始。我希望它从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( ; index< dgv_Layers.Rows.Count; index++)
{
    dgv_Layers.Rows[index].Cells[0].Value = index+1;
}
if(类型==“R”)
{
索引--;//2
//绘制._矩形.删除(索引);
dgv_Layers.Rows.RemoveAt(索引);
计数器--;
对于(int i=0;i
这里不需要使用索引的值。你应该像这样使用这个循环-

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

                dgv_Layers.Rows[i].Cells[0].Value = i+1; 
            }
for(int i=0;i
这将从1开始计算值

或者你可以这样做-

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( ; index< dgv_Layers.Rows.Count; index++)
{
    dgv_Layers.Rows[index].Cells[0].Value = index+1;
}
(;index { dgv_Layers.Rows[index]。单元格[0]。值=索引+1; }
在这种情况下,您确实应该修改底层数据,而不是单元格。