Падтрымліваць пазіцыю элемента пасля рэдагавання радкі ў спісе ... я павінен нават паспрабаваць?

Я ўручную звязванне ASP.NET ListView у масіў аб'ектаў у парадку ў алфавітным парадку па імені. Пасля рэдагавання элемента, то DataSource усталёўваецца зноў і DataBind называецца. Калі імя змянілася, дэталь вы толькі што адрэдагавалі можа быць перамешчаны, патэнцыйна на іншую старонку нават.

Напрыклад; вы проста перайменавалі Hot Dog ў Каўбаса, так Каўбаса пераехала пасля 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, я заўсёды заказваю мае дадзеныя па базе дадзеных ID, каб пераканацца, што становішча кожнага элемента дадзеных застаецца нязменным. Не ведаючы, што ваш крыніца дадзеных выглядае, што цяжка сказаць, калі вы маглі б пазбегнуць або змяніць пересортируйте.

Тым не менш, (<�моцны> гэта чыстае здагадка, так як я не ведаю, якія дадзеныя вы працуеце з ), калі вы захавалі свой першапачатковы крыніца дадзеных у сесіі (I » м пры ўмове, што вы збіраецеся назад у базу дадзеных і захоп дадзеных пасля таго, як падаць), і ў яго ёсць нейкі спарадкаванае ідэнтыфікатар, то вы маглі б зрабіць нешта накшталт:

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

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

1
дададзена

Гэта некаторыя выпадкаў я мог бачыць патрэба не звяртаючыся спіс і пакінуць гэты пункт, дзе ён знаходзіцца. Хоць нас праграмісты разумеюць, што адбылося, сярэдні карыстальнік можа падумаць, іх пункт быў выдалены.

Я злучыў сайт ўзор, які дэманструе гэта паводзіны. Гэта на самай справе даволі проста дасягнуць, і я ўпэўнены, што вы можаце адаптаваць свой метад для вашага праекта.

У шкарлупіне арэха, кожны раз, калі сетка звязана, я загадваю спіс даных па выбары карыстальніка (або сартаваць па змаўчанні), але прама перад прывязкай яго да сеткі, я правяраю, калі парадак павінен быць захаваны, у гэтым выпадку , выняць апошні парадкавы нумар з-за DataKeyArray сеткі і звязаць гэтыя парадкавыя нумары іх адпаведных элементаў. У тым выпадку, калі яны не хочуць, каб захаваць парадак, я проста звязаць парадкавы нумар паслядоўнасці для кожнага элемента ў адсартаваным спісе. Тады я проста сартаваць па парадкаваму нумару.

Паглядзіце на праекта , і я думаю, што гэта будзе мець больш сэнсу.

0
дададзена