الحصول على بيانات Table2 من علاقة إلى TABLE1 في C # رمز

StackOverflow https://stackoverflow.com/questions/422586

  •  05-07-2019
  •  | 
  •  

سؤال

ولدي جدولين في مجموعة البيانات حيث حقل معرف على كل هو نفسه. لدي علاقة بين الجدولين. كيف يمكنني، في C # رمز، وسحب معلومات من Table2 التي تتعلق المعلومات حول TABLE1؟

ولقد حاولت استخدام DataRow جديد وإسناد ذلك باستخدام GetChildRow، ولكن لسبب ما لا يمكن أن يبدو والعمل على انجاحه.

وأيضا، وأنا أفهم هذا السؤال قد لا تكون مفيدة، واسمحوا لي أن أعرف وأنا سوف محاولة لتوفير مزيد من التوضيح.

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

المحلول

والجواب هو مختلفة (وأسهل بكثير) إذا تم بقوة كتبته مجموعة البيانات الخاصة بك (أي ولدت من ملف .xsd و). سوف أفترض أن هذا ليس هو الحال أدناه، ولكن إذا كان الكلام.

لكائنات مجموعة البيانات العامة، والجواب يعتمد إلى حد كبير على ما لديك عقد من أن تبدأ. إذا كان لديك مجرد ID، فإن ذلك ربما أبسط لاستخدام ID في اختيار على DataTable وذات الصلة. وهذا العمل إما (أو كليهما) طاولات لأنه سيعود مجموعة من DataRows مع المعلومات التي تبحث عنها.

إذا كان لديك DataRow الأم (ويبدو من المرجح أن تفعل)، ثم أفضل طريقة لاستخدام يعتمد على علاقة أي بمعنى. الذي هو الأصل. إذا TABLE1 هو والديك وأنت تريد أن انتقل إلى صفوف الأطفال Table2 ذات الصلة، كنت تبحث عن GetChildRow (أفضل أن تكون محددة كما يمكنك في قول ذلك الذي يتعلق متابعة). إذا Table2 هو الأصل وأنت تبحر من TABLE1 DataRow إلى الأصل في Table2، فأنت تريد أن تستخدم GetParentRow (مرة أخرى، أن تكون محددة في تحديد العلاقة كما يمكنك، استخدام الكائن علاقة إذا كان لديك في متناول يدي ).

نصائح أخرى

في مكتوب DataSet بقوة، فإن كل كائن DataRow يكون أساليب أو خصائص محددة لكل العلاقة. إذا كان لديك DataRow الأم وتريد أن تنقل إلى الأطفال في Table2، وسوف تكون وسيلة المتعدد الأقطاب (أي "row.GetTable2Rows ()"). إذا كان لديك طفل وأريد أن انتقل إلى الوالدين، سيكون خاصية فريدة ( "row.Table2Row").

وحتى هنا هو ما فعلته. اسمحوا لي أن أعرف إذا كان هذا هو الأفضل إذا كان هناك شيء أو أسرع. أنا خلقت الجدول الجديد الذي هو نسخة طبق الأصل من الجدول (2) وكتب هذا الرمز:

currentDataSet.GroupTableOneRow.Clear();
currentDataSet.GroupAttendingEventTable[groupAttendingEventCounter].GetGroupTableRows().CopyToDataTable(currentDataSet.GroupTableOneRow, LoadOption.OverwriteChanges);

وبعد ذلك يمكن أن أدعو على طاولة واحدة في سجل الصفر، والحصول على اسم أحتاج. كان يعمل، ولكن هناك وسيلة أكثر يتسم بفعالية؟

وكان تعليق يست طويلة بما يكفي لهذه الاستجابة ولذا فإنني سوف تجعل من جواب آخر:

وليس هناك حاجة لاستخدام جدول جديد. مجرد استخدام صفيف من الكائنات الصف والذهاب من هناك. يقول مساحة الاسم الخاص بك DataSet هو "EventData" وسوف كسر عليه قليلا لذلك ليس كل شيء على سطر واحد.

// The parent row
EventData.GroupAttendingEventRow groupAttendingEvent = currentDataSet.GroupAttendingEventTable[groupAttendingEventCounter];
// an array of children rows
EventData.GroupTableRow[] eventGroup = groupAttendingEvent.GetGroupTableRows();

وبعد ذلك يمكنك العمل على مجموعة "eventGroup" كما تريد بما في ذلك الحصول على العنصر الأول مع eventGroup [0].

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