السلام عليكم
لدي صفحة اريد ان اعرض فيها اسم المصنع وتحته المنتجات التي ينتجها
المصنع والمنتجات مخزنه بالداتابيس في نفس الجدول
اعطني رأيك
هل اعرضها عن طريق
Nested datalist
او
Gridview inside datalist
واذا عندكم اقتراحات اخرى غير هذه فياليت تفيدونا
السلام عليكم
لدي صفحة اريد ان اعرض فيها اسم المصنع وتحته المنتجات التي ينتجها
المصنع والمنتجات مخزنه بالداتابيس في نفس الجدول
اعطني رأيك
هل اعرضها عن طريق
Nested datalist
او
Gridview inside datalist
واذا عندكم اقتراحات اخرى غير هذه فياليت تفيدونا
قبل أن أدلي برأيي لدي ملاحظة :
المصنع والمنتجات مخزنه بالداتابيس في نفس الجدول
العادة أن تكون هذه علاقة one-many وغير صحيح كليا أن يكونا في جدول واحد !!!
تم تعديل هذه المشاركة بواسطة Scoool في 22 يوليو 2007 في 08:42
>> تجارب برمجية <<
[/وسط][/وسط][/وسط]
Scoool كتب:قبل أن أدلي برأيي لدي ملاحظة :المصنع والمنتجات مخزنه بالداتابيس في نفس الجدولالعادة أن تكون هذه علاقة one-many وغير صحيح كليا أن يكونا في جدول واحد !!!
اشكرك على الرد وايضا الملحوظة لكن هذه هي الاوامر!!!!
لا تحرمني من اعادة المرور واعطاء رأيك
شكرا
أولا أنصحك بأن تحارب لتغيير هذه الأوامر ..
لأنه لا يوجد محلل نظم في الدنيا يقبل بهذه الطريقة ..
الا اذا كانت قاعدة البيانات جاهزة ولا يمكن تغييرها ،،
حينها أقول
(( الله يعينك ))
لا أقول ليس هناك حل .. انما بصراحة أعتذر لأن الطريقة غير صحيحة من البداية !!
>> تجارب برمجية <<
[/وسط][/وسط][/وسط]
اخى HMD
حاول قراءة كتاب فى هندسة قواعد البيانات بمعني انك ستسلك الطريق الصحيح حتى تستطيع بناء برنامجك بشكل افظل
قبل ان تعرض النتائج فى Gridview او datalist
وهذا مثال بسيط للربط بين جدولين الطلاب والدرجات :-
ماذا نعني بربط الجداول؟
ربط الجداول يعني إنشاء علاقة ارتباط دائمة بين جدولين أو أكثر، ويكون من نتيجتها استخراج بيانات من كلا الجدولين وإظهارها في نماذج أو تقارير أو استعلامات.
يعتبر ربط الجداول أمر ضروري لان التصميم الجيد لقاعدة البيانات يتطلب منك أن تنشئ جداول صغيرة يشتمل كلا منها على بيانات ذات طبيعة واحدة.
أنواع العلاقات:
يمكن ربط جدولين إذا كان كليهما يشتمل على حقل أو أكثر لهما نفس البيانات، وعادة تسمى الحقول في كلا الجدولين بنفس الاسم.
علاقة one-to-many :
وهي الأكثر استخداما، وتعني أن السجل الواحد في جدول البيانات الرئيسي Primary Table يقابله أكثر من سجل في الجدول الآخر Related Table.
علاقة one-to-one :
هذا النوع أقل استخداما من النوع السابق، وفيه كل سجل في الجدول الرئيسي يقابله سجل واحد في الجدول المرتبط به.
علاقة many-to-many :
هذا النوع نادر الاستخدام، وفيه يقابل كل سجل من الجدول الرئيسي عدة سجلات في الجدول المرتبط به، والعكس حيث يقابل كل سجل في الجدول المرتبط عدة سجلات في الجدول الرئيسي.
هذا النوع من العلاقات معقد، لذا يجب ربط الجدولين بأسلوب غير مباشر وذلك بإنشاء جدول ثالث يعمل على تجزئة هذه العلاقة إلى علاقتين من النوع one-to-many ، وفي هذه الحالة يكون المفتاح الرئيسي للجدول الجديد مكون من المفتاحين الأساسيين للجدولين الآخرين.
تطبيق عملي على الربط بين الجداول:
قبل إنشاء علاقة بين جدولين تأكد من الآتي:
1. كلا الجدولين يهما حقل / حقول متشابهة من حيث نوع البيان المخزن Data Type داخل الحقل.
2. تحديد الجدول الرئيسي والجدول التابع.
3. إذا لم يكن الجدول التابع يتطابق مع حقل المفتاح الأساسي في الجدول الرئيسي، فقم بإضافة حقلا جديدا في الجدول التابع بنفس مواصفات حقل المفتاح الأساسي في الجدول الرئيسي.
4. لا يمكن تعديل مواصفات أو حذف الحقول التي أسست علاقة الربط إلا إذا ألغيت علاقة الربط بين الجدولين أولا.
ربط الجداول في قاعدة البيانات my database:
1- قم بفتح قاعدة البيانات التي قمت بإنشائها في الدرس السابق.
2- من قائمة أدوات Tools اختر علاقات Relationships.
- ستظهر لك نافذة إظهار جدول Show Table، قم بإضافة الجداول الثلاثة Student Table ، Course Table و Grades Table، وذلك عن طريق النقر المزدوج على اسم الجدول أو عن طريق تحديد اسم الجدول ثم النقر على زر إضافة Add.
3- ربط الجدولين Student Table و Grades Table باستخدام علاقة الارتباط one-to-many :
- يعتبر جدول الطالب Student Table هو الجدول الأساسي، بينما جدول الدرجات Grades Table هو الجدول التابع.
- يعتبر حقل "الرقم " مفتاح أساسي Primary Key في جدول الطالب بينما يعتبر الحقل "رقم_الطالب" مفتاح أجنبي Foreign Key في جدول الدرجات.
إذن نستطيع إنشاء علاقة الارتباط one-to-many بين الجدولين عن طريق سحب الحقل "الرقم" من جدول الطالب Student Table وإسقاطه فوق الحقل "رقم_الطالب" في جدول الدرجات Grades Table وسوف تظهر لك مباشرة النافذة التالية:
قم بتنشيط فرض التكامل المرجعي Enforce Relational Integrity بخياريه:
Cascade Update Related Fields (تتالي تحديث الحقول المرتبطة)
Cascade Delete Related Records (تتالي حذف السجلات المرتبطة)
وفائدة ذلك أنه عند تعديل أو حذف أحد الحقول فسيتم تحديث علاقة الارتباط تلقائيا بين الجدولين.
ثم انقر فوق إنشاء Create، وستلاحظ ظهور علاقة one-to-many بين الجدولين.
4- ربط الجدولين Course Table و Grades Table باستخدام علاقة الارتباط one-to-many :
- يعتبر جدول الطالب Course Table هو الجدول الأساسي، بينما جدول الدرجات Grades Table هو الجدول التابع.
- يعتبر حقل "رقم_المادة" مفتاح أساسي Primary Key في جدول المقرر بينما يعتبر الحقل "رقم_المادة" مفتاح أجنبيForeign Key في جدول الدرجات.
إذن نستطيع إنشاء علاقة الارتباط one-to-many بين الجدولين عن طريق سحب الحقل "رقم_المادة" من جدول المقرر Course Table وإسقاطه فوق الحقل "رقم_المادة" في جدول الدرجات Grades Table وسوف تظهر لك مباشرة النافذة التالية:
قم بتنشيط فرض التكامل المرجعي Enforce Relational Integrity بخياريه:
Cascade Update Related Fields (تتالي تحديث الحقول المرتبطة)
Cascade Delete Related Records (تتالي حذف السجلات المرتبطة)
وفائدة ذلك أنه عند تعديل أو حذف أحد الحقول فسيتم تحديث علاقة الارتباط تلقائيا بين الجدولين.
ثم انقر فوق إنشاء Create، وستلاحظ ظهور علاقة one-to-many بين الجدولين السابقين.
ستكون نافذة علاقات Relationships والتي تظهر العلاقات بين الجداول الثلاثة كما بالشكل التالي:
Scoool
الداتا بيس هذه جاءتني هكذا ولازم ابني عليها النظام بهذه الطريقه انا فعلا حاولت الاعتراض لكن ردوا علي بان هذه الطريقه عالميه!!!
بحثت عن اكواد تعمل datalist inside gridview او datalist inside datalist وكل الاكواد التي وجدتها كانت تقرأ من جدولين مو جدول والى الان لم اجد طريقة لحل مشكلتي!!
bnitt
اشكرك جدا على الشرح الوافي لكن كما قلت ان الداتا بيس جاءتني جاهزه!
ضع بنية الجدول واشرح قليلا وسنجد لك طريقة سهلة ان شاء الله
على كل حال الموضوع بسيط ... اجعل الجدول جدولان من دون عمل شيء :D
أنشئ ما يدعى View بطريقة احترافية تقوم بعمل الجدول جدولين ...
لقد دخلت شركة عقارية فيها قاعدة بيانات لم تصدقو ما أقول لكم عنها ...
تصورو أن بيانات عقار واحد موجودة في جدول واحد
ومعه بيانات الصفقات وبيانات احصاءات السعر وغيرها من الأمور التافه في تصميم وتطبيق الأنظمة
تصورو أن كلمات سر المستخدمين تسجل في قاعدة البيانات من دون أي عملية تشفير ... شيء مضحط بالنسبة للشركات حيث أن أي موظف (من قسم IT)يستطيع بسهولة بالغة الاستعلام عن كلمات السر
والحصول عليها جميعا ....
ومع هذا تم تصميم نظام (لفترة محدودة) وكان يعمل بشكل رائع ريثما طورنا النظام الجديد الذي يعتمد التقنيات الحديثة
نعم أخي الكريم Scool في الشركات هنالك مبدأ ثابت : الوقت = النقود
وعمل غيرك له ثمنه وعملك له ثمنه
فلذا علينا أن نتجانس مع البيئة ريثما نستطيع تطويرها وتشذيبها (ان صح التعبير) بشكل يلائم المتطلبات ويواكب تطور التكنولوجيا ...
راح اشرح لكم مو على مصنع على دول
الجددول مكون من خانتين
الاولى من نوع varchar وهي البرايمري كي لكن المخزن ارقام ، والثانيه الاسم ايضا من نوع varchar
التصنيف الاول (الدوله) رقمها مكون من خانتين
التصنيف الثاني (المنطقه) مكون من ثلاث خانات الخانتين الاولى والثانيه تحمل نفس الرقم للصنف الاول الذي تنتمي اليه
التصنيف الثالث (المدينه) مكون من 4 خانات
مثال:
السعوديه ------> 10
المنطقه الوسطى ------> 101
المنطقه الشرقيه ------> 102
المنطقة الغربية ------> 103
الرياض ------> 1011 بمعنى مدينه (لانها اربع خانات) في المنطقة الوسطى في السعوديه (ثلاث خانات والخانه الاولى والثانيه تحمل هي رمز السعوديه (01) )
مكه ------> 1031 لانها تنتمي للمنطقه الغربيه
الكويت ------> 11
الاردن ------> 12
منطقة في الاردن ------> 120
مدينه في المنطقه التي في الاردن ------> 1201
وهكذا
ان شاء الله انكم فهمتوا
انا ابغى اعرض كل منطقه وتحتها المدن التابعه لها
فقط !! لكن ما عرفت!
راح اجرب الــ View لكن احس الطريقه طويله
وعلى فكره الداتابيس جدا احترافيه على عكس ما تتوقعون ،، بس يمكن فهمتوني خطأ !
اقتباسوعلى فكره الداتابيس جدا احترافيه على عكس ما تتوقعون ،، بس يمكن فهمتوني خطأ !
غريبة كيف احترافية ؟؟؟
اقتباسالاولى من نوع varchar وهي البرايمري كي لكن المخزن ارقام
هل تظن أن هذا هو الاحتراف مثلا أن تتحايل على التقنبة :s
حسنا سأقول لك بصراحة كيف تقوم بعمل جدولين كالتالي:
View1: SELECT * FROM TableName Where Len(cast(StrID as nvarchar))=2 //كافة الدول View2: SELECT * FROM TableName Where left(cast (StrID as nvarchar),2)='10' //كافة مناطق السعودية View3: SELECT * FROM TableName Where left(cast (StrID as nvarchar),3)='101' //مدن المنطقة الوسطى
هلأ : اجعل الأرقام عبارة عن بارامترات تمرر من خلال التطبيق
انظر ببساطة كيف قمنا بتسخير ما لدينا ليتناسب مع متطلباتنا
الآن وبكل بساطة عليك أن تنسى أن هنالك جداول لتتعامل معها وأن تتعامل على أن Views التي قمت بكتابتها (أو Stored Procedure في حالة تمرير باراميترات) هي الموجودة
أرجو أن تكون الفكرة قد وصلت إلى ذهنك بنجاح
تم تعديل هذه المشاركة بواسطة Arwany في 25 يوليو 2007 في 07:18
تم ايجاد الحل عن طريق nested datalist + view
شكرا
تم تعديل هذه المشاركة بواسطة HMD في 26 يوليو 2007 في 17:38
هذا الموضوع مغلق.