Поддержание позиции позиции после редактирования строки в списке ... должен ли я даже попробовать?

Я привязываю ASP.NET ListView к массиву объектов, отсортированных по алфавиту по имени. После редактирования элемента DataSource снова устанавливается и вызывается DataBind. Если имя изменилось, элемент, который вы только что отредактировали, возможно, переместился, возможно, на другую страницу.

Например; вы просто переименовали Хот-дог в колбасу, так что Колбаса перемещалась после завершения ItemUpdating.

--- OLD LIST ---   --- NEW LIST ---
    Hamburger          Hamburger
    Hot Dog______      Pizza
    Pizza        |_____Sausage

Можно ли ожидать такого поведения от формы? Когда вы редактируете строку, вы должны увидеть эту строку после ее сохранения? Должна ли она находиться в том же положении? Должен ли я отображать только запись, которую вы только что отредактировали после сохранения?

Что касается технической стороны сохранения предыдущего порядка после сохранения и, возможно, изменения порядка;

Я знаю , почему это происходит. Я ищу идеи избежать этого.

Я думаю о том, чтобы удалить оба элемента управления EditItemTemplate в ItemTemplate и установить видимость элементов управления только для чтения/редактирования на основе ListView EditIndex.

Это кажется выполнимым, но мне интересно, есть ли у вас прекрасные люди какие-либо другие идеи.

2

3 ответы

Поведение, которое вы видите здесь, - это типичный желаемый результат, как только вы вносите изменения в правильную сортировку информации. Если вам нужно сохранить старую структуру, вам, скорее всего, придется идти по маршруту, аналогичному тому, что вы упомянули в своем посте.

Тем не менее, я бы взял секунду и посмотрел, действительно ли это то, что ваши пользователи захотят, я мог видеть, что это становится очень запутанным после большого количества изменений.

2
добавлено
Да, я использовал несколько веб-инструментов управления, которые ведут себя таким образом. Список пересортируется после каждого редактирования. Единственное изменение, похоже, заключается в том, остаетесь ли вы там, где находитесь в списке, или следуйте за записью в новое место. Это особенно актуально, когда пейджинг вступает в игру ... и ЭТО зависит от требований ваших пользователей.
добавлено автор Tevo D, источник
Вот прекрасный пример - мои расчеты по онлайн-банковскому счету сортируются по дате, которую нужно заплатить. Я могу изменить дату первого элемента на более позднюю дату, и он может исчезнуть из списка. Это ожидаемое поведение, так как это взгляд на то, что будет выплачиваться в течение определенного периода времени.
добавлено автор Tevo D, источник
Пересортировка после изменения типичного поведения для списков данных? Я пытаюсь вспомнить любые веб-приложения, в которых мне даже нужно было отредактировать строку, которая будет удалена из исходного местоположения, но в данный момент я не могу этого сделать.
добавлено автор Orange Kid, источник

Когда мои пользователи работают с наборами данных в GridView s, я всегда заказываю свои данные по идентификатору базы данных, чтобы убедиться, что позиция каждого элемента данных остается неизменной. Не зная, как выглядит ваш источник данных, трудно сказать, можете ли вы избежать или изменить повторный сортировку.

Однако ( это чистая спекуляция, так как я не знаю, какие данные вы работаете с ), если вы сохранили исходный источник данных в сеансе (I ' m, предполагая, что вы возвращаетесь в базу данных и захватываете данные после отправки), и у него есть какой-то упорядоченный идентификатор, тогда вы можете сделать что-то вроде:

void ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
    List 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 , а затем сохраните их изменения в базе данных.

Alternatively, you could keep your current save methods the same, and just add something like:

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;
}

Я не уверен, что ваши пользователи поймут подсказку пользовательского интерфейса, или если это поможет им, если оно исчезнет (что, конечно, сделает вашу жизнь более сложной), но я думаю, что это менее неуклюжий, чем предыдущий вариант, поскольку если вы сохраняете изменения в базе данных после каждого редактирования.

1
добавлено

В некоторых случаях я мог видеть необходимость не прибегать к списку и оставлять предмет, в котором он находится. В то время как мы, программисты, понимаем, что произошло, средний пользователь может подумать, что их предмет был удален.

Я собрал образец веб-сайта, демонстрирующий это поведение. На самом деле это довольно просто, и я уверен, что вы можете адаптировать мой метод для своего проекта.

В оболочке орехов каждый раз, когда сетка привязана, я заказываю список данных по выбору пользователя (или сортировку по умолчанию), но прямо перед привязкой к сетке проверяю, должен ли порядок быть сохранен, и в этом случае , Я извлекаю последний порядковый номер из DataKeyArray сетки и связывает эти порядковые номера с их соответствующими элементами. В случае, когда они не хотят сохранять порядок, я просто связываю инкрементный порядковый номер с каждым элементом в отсортированном списке. Затем я просто сортирую по порядковому номеру.

Взгляните на проект , и я думаю, что это будет иметь больше смысла.

0
добавлено
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)