سؤال

الموقف هو أنني بحاجة إلى إنشاء جدول في عرض الشبكة يبدو هكذا:

---------- | ID --- | --- الاسم-|-1/2002-- |-2/2002-- |-1/2003-- | ........ | 2/2009 |
Cust1-- |
Cust2-- |
:
:
لدي جدولين في DB - العملاء والطلبات ، من خلال LINQ إلى SQL DataContext
معرف واسم العملاء الذين أحصل عليهم من استعلام بسيط

var custInfo = from cust in db.Customers
               select new { ID = cust.Id, 
                            FullName = cust.FirstName + " " + cust.LastName } 


dataGridOrdersPreview.DataSource = custInfo;

وأنا بحاجة إلى بعض أدنى فكرة ، وكيفية إنشاء هذه الأعمدة بالتنسيق T/السنة حيث تشير T إلى النصف الأول أو الثاني من العام ، وتعيين الأعمدة التي تم إنشاؤها كل عميل في تلك الجلسة من العام (عرض التكاليف فقط)

تعديل

بقدر الآن ، أنا أحاول شيئًا كهذا:

var orders = from ord in db.Orders
             group ord by ord.Id_cust into grouped
             let costs = grouped
               .Where( s => s.YearSession == session && s.Year == year)
               .Select(a => new { Costs = a.Cost ) } )

             select new { ID = grouped.Key,
                          Name = custInfo
                             .Where( a => a.ID == grouped.Key)
                             .Select( j => j.Name).Single(),   
                          Cost = ExtensionLibrary.Sum(costs, "\n")
                      };

(في التكلفة ، الحصول على تكاليف ملخص فقط في جلسة تلك السنة لكل عميل)

ثم أفكر في تكرار السنوات والجلسات والحصول على نتائج الاستعلام بطريقة أو بأخرى

while (year <= DateTime.Today.Year)
        {
            year++;
            while (session < 2)
            {
                session++;
                dataGridOrdersPreview.Columns.Add(session +"/"+ year);
                col.Add((session +"/"+ year), 
                         orders.Select( a => a.Cost ).ToList() );
                /* col is Dictionary<string, List<string> > */

            }
            session = 0;
        }

لقد قمت هنا بإنشاء أعمدة أريدها ولدي أوامر في القاموس حيث يكون المفتاح هو اسم العمود والقيمة هي أوامر في هذا العمود ، لكنني بحاجة إلى بعض المساعدة في ربطها بتلك الأعمدة

هل كانت مفيدة؟

المحلول

الطريقة التي رأيتها بها هي إنشاء فئة تحتوي على خصائص تريدها ، على سبيل المثال ،

class CustOrders
{
   public string CustName {get; set;}
   public int Orders2002-1 {get; set;}
   public int Orders2002-2 {get; set;}
   ...
   public int Orders2009-1 {get; set;}
}

ثم استخدم system.windows.forms.bindingsource ، ودعوها تقول custordsbindingsource وقم بتعيين بيانات البيانات الخاصة بها على قائمة صفك الجديد.

List<CustOrders> myListOfCustOrders =  new List<CustOrders>();
/* Code to populate myListOfCustOrders */
CustOrdsBindingSource.DataSource = myListOfCustOrders;

في هذه الحالة ، سيتعين عليك كتابة الرمز لتحويل كل نتيجة لنتائج الاستعلام إلى مثيل من المحذرين وتخزينه في MyListofCustorders.

أخيرًا ، يجب أيضًا تعيين مصدر بيانات عرض الشبكة:

gridView1.DataSource = CustOrdsBindingSource;

المشكلة الكبيرة التي أراها مع هذا النهج هي أنه سيتعين عليك تغيير فئة الاحتجاز كل عام ما لم يكن هناك بعض الفودو يمكن أن يقترح البعض إدراج الخصائص في الفصل في وقت التشغيل.

في كلتا الحالتين ، آمل أن يمنحك هذا بداية.

نصائح أخرى

طالما لن يكون هناك تحديث/إضافة/حذف الصفوف ، أعتقد أنني سأولد هذه الشبكة يدويًا.

جلب قائمة العملاء وعدد عدد المبيعات في أي سنة/جلسة. ثم في النموذج ، خذ تلك القائمة وإنشاء الأعمدة المطلوبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top