الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تغير اماكن عناصر قاءمة (رفع الى الاول /رفع /تنزيل/ تنزيل الى الاخر)

بدأه زكيري عبد العالي في 16 ديسمبر 2012 · 6 رد · 515 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اشعر انه يوجد حل ابسط من

المشروع في المرفق

انا استعمل كنترولات DevExpress

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!Page.IsPostBack)
            {
                if (Session["opersons"] == null)
                {
                    List<person> opersons = new List<person>();
                    opersons.Add(new person { Index = 1, Name = "A" });
                    opersons.Add(new person { Index = 2, Name = "B" });
                    opersons.Add(new person { Index = 3, Name = "C" });
                    opersons.Add(new person { Index = 4, Name = "D" });
                    opersons.Add(new person { Index = 5, Name = "E" });
                    opersons.Add(new person { Index = 6, Name = "F" });
                    Session["opersons"] = opersons;
                }
            }
            GvPersonsRefresh(0);
        }

        private class person
        {
            public int Index { get; set; }
            public string Name { get; set; }
        }

        protected void btnFirst_Click(object sender, EventArgs e)
        {
            /*get select rank */
            int ind = (int)gvPersons.GetRowValues(gvPersons.FocusedRowIndex, "Index");
            List<person> opersons = (List<person>)Session["opersons"];
            opersons = opersons.OrderBy(x => x.Index).ToList<person>();
            if (ind == 1) return;

            /* حفض السطر المحدد في ابجكة و السطر السابق في ابجكة اخر  */
            person opersonFrom = opersons.Where(x => x.Index == ind).ToList<person>()[0];
            int i = 2;
            foreach (person col in opersons)
            {
                if (col == opersonFrom)
                    col.Index = 1;
                else
                {
                    col.Index = i;
                    i++;
                }
            }

            /* فحفض القاءمة الجديدة في السيشن*/
            Session["opersons"] = opersons;

            /* عرض النتيجة في القريد فيو*/
            GvPersonsRefresh(0);


        }

        protected void btnUp_Click(object sender, EventArgs e)
        {
            /*استرجاع قيمة اندكس المحدد */
            int index = gvPersons.FocusedRowIndex;
            int ind = (int)gvPersons.GetRowValues(gvPersons.FocusedRowIndex, "Index");
            if (ind == 1) return;
            List<person> opersons = (List<person>)Session["opersons"];

            /* حفض السطر المحدد في ابجكة و السطر السابق في ابجكة اخر  */
            person opersonFrom = opersons.Where(x => x.Index == ind).ToList<person>()[0];
            person oColumnTo = opersons.Where(x => x.Index == ind - 1).ToList<person>()[0];
            opersonFrom.Index = ind - 1;
            oColumnTo.Index = ind;

            /* تغير اماكن الابجكة */
            opersons.Where(x => x.Index == ind).ToList<person>()[0] = opersonFrom;
            opersons.Where(x => x.Index == ind - 1).ToList<person>()[0] = oColumnTo;

            /* فحفض القاءمة الجديدة في السيشن*/
            Session["opersons"] = opersons;

            /* عرض النتيجة في القريد فيو*/
            GvPersonsRefresh(index + 1);            
        }

        protected void btnDown_Click(object sender, EventArgs e)
        {
            /*استرجاع قيمة اندكس المحدد */
            int index = gvPersons.FocusedRowIndex;
            int ind = (int)gvPersons.GetRowValues(gvPersons.FocusedRowIndex, "Index");
            List<person> opersons = (List<person>)Session["opersons"];
            if (ind == opersons.Count) return;


            /* حفض السطر المحدد في ابجكة و السطر التالي في ابجكة اخر  */
            person opersonFrom = opersons.Where(x => x.Index == ind).ToList<person>()[0];
            person oColumnTo = opersons.Where(x => x.Index == ind + 1).ToList<person>()[0];
            opersonFrom.Index = ind + 1;
            oColumnTo.Index = ind;

            /* تغير اماكن الابجكة */
            opersons.Where(x => x.Index == ind).ToList<person>()[0] = opersonFrom;
            opersons.Where(x => x.Index == ind - 1).ToList<person>()[0] = oColumnTo;

            /* فحفض القاءمة الجديدة في السيشن*/
            Session["opersons"] = opersons;

            /* عرض النتيجة في القريد فيو*/
            GvPersonsRefresh(index-1);

        }

        protected void btnLast_Click(object sender, EventArgs e)
        {
            /*get select rank */
            int ind = (int)gvPersons.GetRowValues(gvPersons.FocusedRowIndex, "Index");
            List<person> opersons = (List<person>)Session["opersons"];
            opersons = opersons.OrderBy(x => x.Index).ToList<person>();
            if (ind == opersons.Count) return;

            /* حفض السطر المحدد في ابجكة و السطر السابق في ابجكة اخر  */
            person opersonFrom = opersons.Where(x => x.Index == ind).ToList<person>()[0];
            int i = 1;
            foreach (person col in opersons)
            {
                if (col == opersonFrom)
                    col.Index = opersons.Count;
                else
                {
                    col.Index = i;
                    i++;
                }
            }

            /* فحفض القاءمة الجديدة في السيشن*/
            Session["opersons"] = opersons;

            /* عرض النتيجة في القريد فيو*/
            GvPersonsRefresh(opersons.Count);            
        }

        private void GvPersonsRefresh(int Rowindex )
        {
            gvPersons.DataSource = (List<person>)Session["opersons"];
            gvPersons.DataBind();
            gvPersons.SortBy(gvPersons.Columns["Index"], ColumnSortOrder.Ascending);
            gvPersons.FocusedRowIndex = Rowindex;
        }
    }
}

شكرا على المساعدة

post-1034-020415600 1355676867_thumb.jpg

WebApplication1.rar

المرفقات
List.jpg

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 17 ديسمبر 2012 في 12:49

#2

الا يوجد حل اسهل من هذا

#3

السلام عليكم ..

أخ زكيري .. الكثيرين لم يعمل معهم المشروع بسبب أننا غير مثبتن الــ DevExpress لكن لا مشكلة قمت ببناء مثال عادي ..

لكن ماذا تريد ان تفعل , هل تريد تبديل مواقع العناصر كلها ثم تعديل الــ Index ...؟ ما فائدة الــ Index .. ؟ لماذا لا نستبدل الــ Name فقط ...؟

ببساطة لتبديل مكان عنصرين في List نستخدم :

person p;
    	p = opersons;
    	opersons = opersons[j];
    	opersons[j] = p;

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#4

السلام عليكم

شكرا اخي حسام

1- لماذا لا نستبدل الــ Name

لا استطيع

في الحقيقة القاءمة عبارة عن معلومات اتيت من جدول في قاعدة بيانات

ويوجد في مل عنصر من القاءمة 10 حقول مقابل الى سجل في قاعدة بيانات

2- هل تريد تبديل مواقع العناصر كلها ثم تعديل الــ Inde

هذه الفكرة التي اشتغلت عليها و اريد ان كلنت هنلك فكرة اسهل

3-ما فائدة الــ Index

في الحقيقة اسم الخاصيه او الحقل SORT_ORDER و في كل مرة اغير الترتيب اسجله في السيشن و في الاخير احفض الكل في القاعدة دفعة واحدة

الفكرة التي قمتبها

 int ind = (int)gvPersons.GetRowValues(gvPersons.FocusedRowIndex, "Index");

استرجع بها القيمة الحلية للسطر المحدد ل SORT_ORDER

 List<person> opersons = (List<person>)Session["opersons"];

استرجع القاءمه من القريد

في حلة الاول

استرجع السطر المحدد

اعيد ترتب SORT_ORDER من الثاني الى الاحير

و اضع قيمة 1 في العنصر المحدد

في حالة الاخر

نفس الشي الا اني اضع مجموع الاسطر الى الاخير في العنصر المحدد

في حالة التالى

اقوم بما قلته انت احفض الاول و الثاني ثم اسبدل الاةل بالثاني

و في الرفع

نفس الفكرة

على العموم شكرا

ضننت ان الكود الذي قمت به معقد ويوجد اشاء اسهل

شكرا

#5

السلام عليكم ...

شكرا على التوضيح و الشرح ..

كملاحظة :

  1. مالهدف من ترتيب الــ List و المفروض أنها بعد أي عملية تبديل سابقة تكون مرتبة .و نحن نجلبها من قاعدة البيانات مرتبة .
  2. ألا يمكن استبدال الكود :
    person opersonFrom = opersons.Where(x => x.Index == ind).ToList<person>()[0];

    بالكود :

    person opersonFrom = opersons[gvPersons.SelectedIndex];

  3. يجب اختبار الكود إذا كان يعمل ... (لم استطع) .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#6

السلام عليكم ...

شكرا على المتابعة

مالهدف من ترتيب الــ List و المفروض أنها بعد أي عملية تبديل سابقة تكون مرتبة .و نحن نجلبها من قاعدة البيانات مرتبة

نعم في المرة الاولي لكن هناك عمليات حدف و تغيير و اضاقة و تبديل مواضع العناصر على مستوى القاءمة و التي تخزن في السيشن و الحفض النهاءي سيكون على القاعدة اي اني اعمل على الذاكرة فقط.

ألا يمكن استبدال الكود SelectedIndex

نعم الاى اني كماقلت الاندكس الحقيقو الذي اعتمد عليه في طبقة العرض او طبقت المعالاجات موجود في القاعدة .

و لا افضل استعمالى رقم العنصر في القاءمة مادمة اجري عليها عمليات عدة .

بالاضافة انه لايجد فرق في الكود سواء استعمال خاصية او رقم .

يجب اختبار الكود إذا كان يعمل

نعم هناك فرق بين ASPX و Dx:ASPX

اي

gvPersons.SelectedIndex

هي gvPersons.getrowfocus

على ما اضن

شكرا

#7

شكرا .. أخ زكيري

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…