我想做的是,如果我单击 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开始;
答案 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;
}