Привет Пара точек -
Код удаляет выбранный элемент из xml, но помещает его на свое место.Кто-нибудь может мне помочь, что я делаю не так?
В коде нет ничего плохого, и это ожидаемое поведение при удалении элементов из массива XML.Если вы действительно хотите удалить эти пустые элементы, то удалите их перед сохранением XML, как показано ниже, и снова привяжите XML к grid-
xmlDoc.Descendants().Where(d => d.IsEmpty || String.IsNullOrWhiteSpace(d.Value)).Remove();
Подробнее об удалении пустых элементов можно прочитать здесь.
Когда я удалил элемент, ToolID не совпадает с индексом выбранной строки в виде сетки.Как я могу получить правильный ToolID на основе выбранной строки?
Код, который у вас будет работать, будет отлично работать для удаления записей, если выбранный ToolID имеет форму инкрементного способаНапример, в вашем примере XML идентификаторы инструментов равны 1,2 и 3, и если вы выберете 1-ую строку, она будет удалена при добавлении 1 к выбранному индексу, иначе, если ваши идентификаторы инструментов аналогичны данным на снимке экрана (Как и идентичные идентификаторы инструментов для нескольких записей), вам придется изменить приведенную ниже логику, которая удалит все записи с этим идентификатором инструмента -
int id = (ToolsDataGridView.SelectedRows[0].Index) + 1;
To,
int id = Convert.ToInt32((dataGridView1.SelectedRows[0].Cells["ToolID"]).Value);