Когда мои пользователи работают с наборами данных за GridView
с, я всегда упорядочиваю свои данные по идентификатору базы данных, чтобы убедиться, что позиция каждого элемента данных остается неизменной.Не зная, как выглядит ваш источник данных, трудно сказать, сможете ли вы избежать или изменить повторную сортировку.
Однако, ( это чистое предположение, так как я не знаю, чтос данными, с которыми вы работаете ), если вы сохранили исходный источник данных в сеансе (я предполагаю, что вы возвращаетесь в базу данных и получаете данные после отправки), и он имееткакой-то упорядоченный идентификатор, тогда вы могли бы сделать что-то вроде:
void ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
List<MyClass> foodDataSource = Session["dataSource"];
ListItem editedFoodItem = foodListView.Items[e.ItemIndex];
MyFood newFood = new MyFood(
((HiddenField)editedFoodItem.FindControl("foodId")).Value,
((Label)editedFoodItem.FindControl("foodName")).Text
);
foodDataSource.Where(k => k.foodId == newFood.foodId).foodName = newFood.foodName;
// I'm guessing that you'll save somewhere in here,
// rather than do an update-once-style commit to the database when the user clicks a save button.
foodListView.DataSource = foodDataSource;
foodListView.DataBind();
}
Это предполагает, что вы жестко закодировали свой ItemTemplate
для включения конкретного WebControls
/ HtmlControls
.Это неуклюжий, и этот код необходимо реорганизовать, чтобы изолировать неприятный код, такой как вызовы FindControl
в отдельной функции, но это довольно близко к тому, что я делаю, когда мои пользователи обновляют данные в GridView
и затем сохраняют свои измененияв базу данных.
В качестве альтернативы , вы можете оставить текущие методы сохранения такими же, и просто добавить что-то вроде:
void ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
ListItem editedFoodItem = foodListView.Items[e.ItemIndex];
Label foodNameLabel = ((Label)editedFoodItem.FindControl("foodName"));
foodNameLabel.BackColor = System.Drawing.Color.LightGreen;
// Saving in here, somewhere.
// I'm not totally positive that DisplayIndex is the correct property here.
foodListView.Items.Where(k => k.DisplayIndex != e.ItemIndex).BackColor = System.Drawing.Color.White;
}
Я не уверен, если вашпользователи могли бы понять реплику пользовательского интерфейса или помочь ей, если она исчезнет (что, конечно, сделает вашу жизнь более сложной), но я думаю, что это менее неуклюже, чем в приведенном выше варианте, если вы сохраняетеизменения в базе данных после каждого редактирования.