Как удалить одну строку и обновить определенную ячейку в остальных? - PullRequest
0 голосов
/ 19 сентября 2018

enter image description here

Что я хочу сделать, если я нажму кнопку удалить , вся строка будет удалена (например, строка 1).И затем, когда он будет удален, оставшиеся строки обновят свой «идентификатор» до значения удаленной строки.

Например, я удаляю Строка 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;
            }
        }
        }

ОБНОВЛЕНИЕ

Обновлен код.Сделал ту часть, где я могу удалить верхнюю часть и обновить оставшиеся строки.Моя проблема сейчас, когда я удаляю между ними, например, Строка 3, строки обновляются, а идентификаторы начинаются с 3. Я хочу, чтобы он начинался с 1;

1 Ответ

0 голосов
/ 19 сентября 2018

Это потому, что вы используете значение индекса, которое уже 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...