User-14856258 Ответов: 1

Переместить отмеченную строку из gridview1 в gridview2 при нажатии кнопки


Я хочу переместить отмеченную строку в gridview1 в gridview2 при нажатии кнопки, которая находится вне этих gridviews, и удалить строку из gridview1, которую я только что переместил в Griview2.

Что я уже пробовал:

Я пытался искать в интернете несколько вещей для события onbuttonclick в коде позади, но это, кажется, не работает, так как я только начал работать с c#. Пожалуйста, совет

CHill60

"но это, кажется, не работает" - что, кажется, не работает? Вы не поделились с нами кодом, который вы пробовали

User-14856258

Здравствуйте, сэр, добавил То, что я уже пробовал. Пожалуйста, проверьте

CHill60

Если вы собираетесь использовать привязку данных для заполнения gridview, то вам нужно будет удалить строку из источника данных и повторно привязать ее

User-14856258

Ничего не понял

Gerry Schmitz

"Перемещение" включает в себя создание "копии" (данных) и удаление (строки) в одной сетке и добавление (строки) в другой сетке.

1 Ответов

Рейтинг:
1

CHill60

Я думаю, что понимаю, в чем проблема (которую вы, кстати, до сих пор нам не описали).

Вы шагаете по строкам ваших данныхсетка с помощью foreach и попытка повторно связать оба источника данных в этом цикле.

Использовать for цикл для пошагового просмотра ваших данныхстол назад и выполните повторную привязку вне петли в самом конце (для обоих видов сетки).

Зачем использовать for вместо foreach - видишь ли ... документация microsoft[^]

Цитата:
Ни Delete, ни Remove не должны вызываться в цикле foreach при итерации через объект DataRowCollection. Удаление и удаление не изменяют состояние коллекции.
Зачем переходить назад, а не вперед - если вы хотите удалить строки 2 и 3 (скажем) из
1 - Row 1
2 - Row 2
3 - Row 3
4 - Row 4
после удаления строки 2 сетка будет выглядеть следующим образом
1 - Row 1
2 - Row 3
3 - Row 4
так что если вы попытаетесь удалить что такое теперь строка 3 вместо этого вы удалили бы то, что было строкой 4. Неправильный.

Сделайте это в обратном направлении, и вы сначала удалите строку 3, чтобы получить
1 - Row 1
2 - Row 2
3 - Row 4
а строка 2 находится именно там, где она была, когда вы начинали, поэтому вы удаляете правильные строки

Зачем делать привязку вне цикла - вы привязываетесь к datatable, поэтому сначала завершите все свои настройки, а затем беспокойтесь о том, что покажет пользовательский интерфейс.

Псевдо код
for(int i=dtFirst.Rows.Count; i >=0; i--)
{
     // your checks etc
    dtFirst.Rows[i].Delete();
}
// After the loop has completed
.
.
// Rebind to the datatable and update viewstate before leaving the click event
GridView1.DataSource = dtFirst;
GridView1.DataBind();
.
.