تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] كيف أنقل سجلات مختارة من DataGridView موجود في فورم إلى DataGridView في فورم آخر ؟
#21
أنا فاهم اللي تقصده تماماً ، وفاهم الفرق بين SelectedRows و Rows  لكن اللي أقصده أن الكود اللي كتبته لي :
if r.Index   لا يعود لي بإنديكس أول سجل داخل المصفوفة SelectRows، وإنما يعود بقيمة الإنديكس لذلك السجل من على مستوى الـ DataGrid نفسه .

شوف ..
مش الآن SelectedRows[0] = 1001004  وهو أول سجل داخل SelectRows   ؟
أريد أن أضع بيانات هذا السجل على السجل الذي يقف عليه المستخدم في الجريد الخاص بالفاتورة .
فلو قلت  أنا    0  == if r.Index  فلن أحصل على هذا السجل ، لأن r.index  سيأتي بقيمة الانديكس الخاص بالسجل 1001004  من على مستوى الجريد ككل وليس من داخل المصفوفة SelectRows .

تخيل معي كيف يخزن الميثود SelectedRows بداخله السجلات المختارة :
أريد الحصول على الإنديكس الذي بداخل المصفوفة SelectedRows 
لأنه مهما كان الـ Index الخاص بأول سجل سيختاره المستخدم من الجريد ، عندما يتم وضعه داخل SelectedRows فإنه سيأخذ الإنديكس رقم صفر ( 0 )
وبالتالي سأقرأ البيانات من هذا السجل ذو الإنديكس 0 من SelectedRows وأضعه في السجل الحالي الذي يقف عليه المستخدم في الجريد الخاص بالفاتورة ..
أما باقي السجلات فسأضعها في نهاية الجريد ..
هل فهمت قصدي ؟ أتمنى أن الصورة اتضحت لك الآن .
الرد }}}
تم الشكر بواسطة:
#22
السلام عليكم ورحمة الله

أخي أشرف

يبدو أنني لا أجيد التعليم أو أنني لم استطع فهم المطلوب، فسأترك الموضوع لغيري من الأخوة، لعله يفيدك.
الرد }}}
تم الشكر بواسطة:
#23
بالعكس أخي مهموم ..
أسعدتني كثيراً محاولاتك ..
وكلنا نتعلم من بعض ..
شاكر ومقدر لمجهودك القيم .. Heart
وبانتظار بقية الإخوة الأعضاء
الرد }}}
تم الشكر بواسطة:
#24
السلام عليكم ورحمة الله

أخي أشرف

أعتذر على عدم تركيزي

تفضل الكود
PHP كود :
private void BtnSearch_Click(object senderEventArgs e)
        {
            
FrmSearch frm = new FrmSearch();
            if (
frm.ShowDialog() == DialogResult.OK)
            {
                
int i 0;
                foreach (
DataGridViewRow r in frm.simpleMultiselectDataGridView1.SelectedRows.Cast<DataGridViewRow>().Reverse())
                {
                    if (
== 0)
                    {
                        
//هنا يكون row هو SelectedRows[0]
                        
DGVInvoice.Rows.Insert(DGVInvoice.CurrentRow.Index, new object[] { r.Cells[0].Valuer.Cells[1].Valuer.Cells[2].Valuer.Cells[3].Valuer.Cells[4].Value });
                    }
                    else
                    {
                        
//هنا يكون row هو لباقي الأسطر
                        
DGVInvoice.Rows.Add(new object[] { r.Cells[0].Valuer.Cells[1].Valuer.Cells[2].Valuer.Cells[3].Valuer.Cells[4].Value });
                    }
                    
i++;
                }
            }
            
frm.Dispose();
        } 
الرد }}}
تم الشكر بواسطة:
#25
وعليكم السلام ورحمة الله وبركاته ..
أولاً : أعتذر على التأخير في الرد أخي الكريم مهموم لظروف انقطاع النت عندي ..
ثانياً : أنا جربت الكود اللي حضرتك قمت بتعديله في آخر رد لك ، وبالفعل أصبح الآن يقرأ الـ Index  اللي داخل الميثود (المصفوفة) SelectedRows وبذلك تخطينا العقبة الكبرى ..
لكن برضه في مشكلة صغيرة معليش ، وهي :
لاحظ النتيجة بعد التعديل الأخير، لو المستخدم اختار السجلات بشكل عشوائي ، فإنه لا يقوم بترتيب السجلات وإنما يقوم بعكس الترتيب فقط :


أي أنك قمت بعمل ()Reverse للسجلات ، فقلبت الترتيب رأساً على عقب ، ولذلك لو تلاحظ أصبح ترتيب 1001009 قبل 1001006 والمطلوب عمل Sort للسجلات بدلالة الحقل Item Code ، لكني لم أتمكن من عمل ذلك .. فعلمني رجاءً ..
الرد }}}
تم الشكر بواسطة:
#26
السلام عليكم ورحمة الله

أخي أشرف

هذا تعديل بطريقة مختلفة، لكن إن شاء الله يكون حسب ما تريد
PHP كود :
private void BtnSearch_Click(object senderEventArgs e)
        {
            
FrmSearch frm = new FrmSearch();
            if (
frm.ShowDialog() == DialogResult.OK)
            {
                List<
DataGridViewRowselectedRows 
                    
frm.simpleMultiselectDataGridView1
                    
.SelectedRows.Cast<DataGridViewRow>()
                    .
OrderBy(row => row.Cells[0].Value)
                    .
ToList();

                
DGVInvoice.Rows.Insert(DGVInvoice.CurrentRow.Index, new object[] {
                    
selectedRows[0].Cells[0].Value,
                    
selectedRows[0].Cells[1].Value,
                    
selectedRows[0].Cells[2].Value,
                    
selectedRows[0].Cells[3].Value,
                    
selectedRows[0].Cells[4].Value
                
});

                
selectedRows.RemoveAt(0);

                foreach (
DataGridViewRow r in selectedRows)
                {
                    
DGVInvoice.Rows.Add(new object[] {
                        
r.Cells[0].Value,
                        
r.Cells[1].Value,
                        
r.Cells[2].Value,
                        
r.Cells[3].Value,
                        
r.Cells[4].Value
                    
});
                }

            }
            
frm.Dispose();

        } 
الرد }}}
تم الشكر بواسطة:
#27
نعم بالفعل أصبح الكود يرتب السجلات المختارة بالشكل المطلوب ، ولكن هناك مشكلة وهي :
أن السجل المختار الأول ، لا يتم وضعه في السجل الحالي (CurrentRow)  ، وإنما يتم إضافة سجل فارغ جديد ، ليتم وضع البيانات فيه ..
أعتقد أن المشكلة في هذه الأكواد :

كود :
               DGVInvoice.Rows.Insert(DGVInvoice.CurrentRow.Index, new object[] {
                   selectedRows[0].Cells[0].Value,
                   selectedRows[0].Cells[1].Value,
                   selectedRows[0].Cells[2].Value,
                   selectedRows[0].Cells[3].Value,
                   selectedRows[0].Cells[4].Value
               });


بالإضافة إلى ذلك يا ريت تتكرم علي بشرح هذا الكود الذي كتبته :
كود :
;()Cast<DataGridViewRow>().OrderBy(row => row.Cells[0].Value).ToList
الرد }}}
تم الشكر بواسطة:
#28
السلام عليكم ورحمة الله

أخي أشرف

إذا كان هناك سطر فارغ تريده أن يكون مكان فيمكنك حذف السطر الفارغ وذلك بوضع هذا السطر قبل كود إضافة السطر الذي ذكرتوه مباشرة
PHP كود :
DGVInvoice.Rows.RemoveAt(DGVInvoice.CurrentRow.Index); 


السلام عليكم ورحمة الله

أخي أشرف

السطر الذي طلبتم شرحه يوجد فيه الأمر OrderBy ومنه يتضح أنه متعلق بالترتيب أي ترتيب الأسطر وفيه تم تحديد العمود [row.Cells[0 ليتم الترتيب على أساسه
الرد }}}
تم الشكر بواسطة:
#29
كده الكود أصبح مكتملاً ..

جزاك الله خيراً أخي مهموم ..

الله يسعدك في الدنيا والآخرة ..
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Photo [C#.NET] نقل بيانات من فور الي فورم Elalfee 2 411 09-03-25, 08:49 AM
آخر رد: Elalfee
  [C#.NET] عرض سجلات ali_ahmed12 1 678 01-12-22, 01:31 PM
آخر رد: ali_ahmed12
  [سؤال] ازى اضغط على زر في فورم اول ما يفتح mazentq 10 3,233 14-03-22, 04:57 PM
آخر رد: talkybro1
  فورم في المقدمة على الفورم الرئيسي bidaya 5 2,270 23-02-22, 01:42 AM
آخر رد: bidaya
  كيف يمكنني بمجرد ان يتم فتح فورم لاول تم يتم فتح الفورم الثاني abdalwahd 7 2,310 22-01-22, 08:28 PM
آخر رد: ابراهيم ايبو
  [C#.NET] نقل بيانات من فورم لاخر محمد اسماعيل 4 2,109 10-09-21, 08:47 PM
آخر رد: asemshahen5
  [سؤال] كيف أحدد أكثر من صف في DataGridView في وقت واحد بالماوس ، وليس بالضغط على مفتاح Ctrl أشرف حكيم 6 4,699 15-08-21, 01:05 PM
آخر رد: firedragoon123
  Custom Datagridview Paging Rabeea Qbaha 1 1,641 25-02-21, 12:17 AM
آخر رد: Rabeea Qbaha
  مشكله فى التنقل بي سجلات الجدول سلام و محبه 1 1,651 31-01-21, 04:08 PM
آخر رد: سلام و محبه
  [C#.NET] منع كتابة الحروف في DataGridView MustafaShaker 1 1,757 09-01-21, 11:13 AM
آخر رد: ابراهيم ايبو

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم