Ro'yxatdagi satrni tahrir qilgandan keyin maqola qo'yilgan holatini saqlang ... hatto sinab ko'rishim kerakmi?

Men ASP.NET ListView-ni qo'l bilan alifbo tartibida nomi bilan tartiblangan narsalar majmuasiga bog'lamoqdaman. Biror elementni tahrir qilgandan so'ng, DataSource qayta o'rnatiladi va DataBind chaqiriladi. Agar nom o'zgargan bo'lsa, siz o'zgartirgan element sizni boshqa sahifaga ko'chirgan bo'lishi mumkin.

Misol uchun; siz faqat kolbasa uchun Hot Dog deb o'zgartirdingiz, shuning uchun Kolbasa ItemUpdating tugagandan so'ng ko'chib o'tdi.

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

Ushbu turdagi bir shakldan kutish mumkinmi? Agar tartibni o'zgartirganingizda, uni saqlashdan keyin bu qatorni ko'rishni kutasizmi? Xuddi shu holatda bo'lish kerakmi? faqat ni saqlaganingizdan so'nggina tahrirlangan yozuvni ko'rsatishi kerakmi?

Savoldan keyin avvalgi buyurtmani texnik jihatdan qo'llab-quvvatlash va potentsial tartibda o'zgartirishni qilish;

nima uchun bu ekanligini bilaman. Men undan qochish g'oyalarini izlayapman.

Bundan tashqari, EditItemTemplate boshqaruvini ItemTemplate ga birlashtirib, faqat o'qish/tahrirlash elementlari ro'yxatini ListView EditIndex asosida belgilashni bekor qilish haqida o'ylayapman.

Bu mumkin, lekin men millatning boshqa g'oyalari bormi, deb o'ylayman.

2

3 javoblar

Bu erda ko'rilayotgan xatti-harakatlar oddiy istalgan chiqimdir, chunki siz ma'lumotni to'g'ri tartiblangan holda o'zgartirasiz. Agar eski tuzilishni saqlab qolish kerak bo'lsa, ehtimol sizning postingizda qayd etilgan narsaga o'xshash marshrutga o'tishingiz kerak bo'ladi.

Biroq, men sizning foydalanuvchilaringizning xohish-istagiga mos keladimi yoki yo'qligini bilib olsam, bu juda ko'p tahrirdan so'ng chindan ham chalkashliklarni boshdan kechirayotganini ko'rgan bo'lardim.

2
qo'shib qo'ydi
Ha, men bir necha veb-ga asoslangan boshqaruv vositalarini qo'lladim, ularning hammasi shu tarzda harakat qilmoqda. Ro'yxat har bir tahrirdan keyin qayta tartiblangan. Faqatgina o'zgarish siz ro'yxatda bo'lgan joyingizda qolishni xohlaysizmi yoki yangi joyga yozuvni kuzatib borayotganga o'xshaydi. Bu paging o'yinga kirganda ayniqsa ahamiyatlidir ... va bu sizning foydalanuvchilaringiz talablariga bog'liq.
qo'shib qo'ydi muallif Tevo D, manba
Bu erda mukammal bir misol - mening onlayn bank tariflarim to'lanadigan sana bo'yicha tartiblangan. Sana birinchi elementdagi sanani keyinroq sanaga o'zgartirish mumkin va u ro'yxatdan o'chirilishi mumkin. Bu kutilgan xatti-harakatlardir, chunki ma'lum bir vaqt uchun to'lash kerak bo'lgan narsadir.
qo'shib qo'ydi muallif Tevo D, manba
Ma'lumotlar ro'yxatlarini odatiy xatti-tartibga solishdan keyin qayta tartiblanganmi? Men hatto asl joyidan ajratilgan qatorni tahrir qilish uchun kerak bo'lgan veb-ilovalarni eslay olmayapman, lekin hozirgi paytda buni qila olmayapman.
qo'shib qo'ydi muallif Orange Kid, manba

Mening foydalanuvchilarim GridView s da ma'lumotlar to'plamlari bilan ishlayotganda, har bir ma'lumot elementining pozitsiyasi bir xil bo'lishiga ishonch hosil qilish uchun har doim ma'lumotlar bazasi identifikatori tomonidan buyurtma beraman. Ma'lumotlaringiz manbai nimaga o'xshashligini bilmasangiz, qayta tartiblashdan qochib qutulishingiz yoki o'zgartirishingiz mumkinligini aytish qiyin.

Ammo, asl ma'lumot manbaini sessiyada saqlagan bo'lsangiz, ( bu aniq spekülasyondur, chunki men qanday ma'lumotlar bilan ishlashni bilmayman ), men bazaga qaytib borganingizdan so'ng va ma'lumotlaringizni yig'ib olgandan so'ng) va unga o'xshash identifikatorga ega bo'lsangiz, unda quyidagi kabi narsalarni qilishingiz mumkin:

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

Bu WebControls / HtmlControls kodini kiritish uchun ItemTemplate kodini qattiq kodladingiz. Bu juda jirkanch va bu kodni FindControl chaqiriqlari kabi alohida karantin kodiga qayta ishlov berish kerak, lekin bu mening foydalanuvchilarim GridView -ni tanlang va keyin ularni ma'lumotlar bazasiga saqlang.

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

Sizning foydalanuvchilaringiz UI belgisini tushuna oladimi yoki yo'qmi, (agar bu sizning hayotingizni yanada murakkablashtiradigan bo'lsa), ularga yordam berishi mumkinligiga ishonchim komil emas, lekin menimcha, bu yuqoridagi variantdan ko'ra kamroq chalkashlikdir. har bir tahrirdan keyin ma'lumotlar bazasida o'zgarishlarni saqlaganingizda.

1
qo'shib qo'ydi

Ba'zi hollarda ro'yxatga murojaat qilmaslik kerakligi va ob'ektni qaerda qoldirmaslik kerakligini ko'rdim. Bizga dasturchilar nima bo'lganini tushunib etishganda, o'rtacha foydalanuvchi ularning elementlari o'chirilgan deb o'ylashlari mumkin.

Ushbu xatti-harakatni namoyish qiladigan namunali veb-saytni birlashtirdim. Amalga oshirish juda oson va ishonchim komilki, men sizning usulingizni loyihangizga moslashtira olasiz.

Yong'oq qobig'ida, panjara har doim bog'langan bo'lsa, men foydalanuvchining tanlovi bo'yicha ma'lumotlar ro'yxatini (yoki standart tartibda) buyurtma qilaman, lekin uni to'g'ridan-to'g'ri gridga ulashdan oldin, buyurtmaning saqlanishini tekshirib ko'rsam, bu holda , Men oxirgi satr raqami, Gridning DataKeyArray-dan chiqarib tashlayman va bu ketma-ketlikdagi raqamlarni tegishli narsalarga qo'shaman. Buyurtmani saqlamoqchi bo'lmagan hollarda, tartiblangan ro'yxatdagi har bir elementga qo'shimcha ketma-ketlik raqamini qo'shaman. So'ngra men ketma-ket raqam bilan tartibga solaman.

loyihaga qarang va men buni yanada mantiqiy bo'ladi.

0
qo'shib qo'ydi