Parent-Child or Master-Detail Form – VS Drag-n-Drop: जब हम पिछले Section में Discuss किए अनुसार DataSource Wizard का प्रयोग करते हैं, तब Visual Studio द्वारा Generate किए जाने वाले Objects को भी यदि हम बेहतर तरीके से Use करें, तो हम बडी ही तेजी से Simple Database Applications Create कर सकते हैं और काफी हद तक उन्हें Control भी कर सकते हैं।
यानी हमें हमारे हर Database Application को हमेंशा Manually Code करना जरूरी नहीं होता, बल्कि ज्यादातर छोटे Applications को हम Strongly Typed Objects को Use करते हुए भी Rapidly Design व Develop कर सकते हैं, जबकि Strongly Typed Objects Create करने के लिए हम Server Explorer का प्रयोग करते हुए Strongly Typed DataSet Designer के माध्यम से Strongly Typed Object Create कर सकते है या फिर हम DataSource Wizard को Use कर सकते हैं।
जब हम हमारे Application में DataSource Setup करने के बाद बनने वाले विभिन्न Strongly Typed Objects का प्रयोग करते हुए Development करना चाहते हैं, तब हम ज्यादातर जरूरतों को पूरा करने के लिए Drag-and-Drop तकनीक का प्रयोग करते हैं। लेकिन Visual Studio हमें ये सुविधा भी Provide करता है कि DataSource Wizard या Visual DataSet Designer के माध्यम से जो Automated Objects Create हुए हैं, उन Objects को हम हमारी जरूरत के अनुसार Modify कर सकते हैं।
उदाहरण के लिए जब हम DataSource Wizard Use करते हुए Create होने वाले DataSet Object में Customers, Orders, Order Details व Products Table को Select करते हैं, हमारा Data Source हमें कुछ निम्नानुसार दिखाई देता है:
सामान्यत: जब हम इन DataTables को अपने Form पर Drag-and-Drop करते हैं, तो Default रूप से ये DataGridView Control के रूप में Place होते हैं। लेकिन यदि हम इन DataTables के ComboBox के साथ दिखाई देने वाले Down Arrow को Click करें, तो हमें एक Popup Menu दिखाई देता है:
यदि हम इस Popup Menu से “Details” Option को Select कर लें और फिर इस DataTable को Form पर Drag-and-Drop करें, तो हमारा Form Automatically निम्नानुसार Create हो जाता है:
जबकि यदि हम निम्न चित्रानुसार हमारे DataSource Window में दिखाई देने वाले DataTables के Down Arrow पर Click करने पर Display होने वाली List में “Customize…” Option को Select करें-
तो हमें निम्नानुसार एक नया Dialog Box Display होता है:
इस Dialog Box में हमें Data type: [List] Combobox में विभिन्न प्रकार के User Interface Controls को DataSource के साथ Associate करने के लिए Default रूप से Configure किया गया है। यदि हम हमारे DataTable Object के साथ Default रूप से Associated DataGridView Control के स्थान पर ListBox Control को Use करना चाहें, तो हमें इसी Dialog Box में DataGridView के स्थान पर ListBox Control को Select करना होता है। जैसे:
जब हम DataSource Sidebar में दिखाई देने वाले हमारे DataTable Object के साथ इस Dialog Box द्वारा ListBox Control को Set करके OK Button पर Click करते हैं और फिर इस DataTable को Drag-and-Drop द्वारा Form पर Place करते हैं, तो इस बार हमारा Form कुछ निम्नानुसार Create होता है:
इतना ही नहीं, हम हमारी जरूरत व इच्छानुसार विभिन्न DataTables के विभिन्न Columns के लिए भी किसी Particular User Interface Control को निम्न चित्रानुसार Associate कर सकते हैं:
Master/Detail or Parent/Child Using Drag-and-Drop
जब हम DataSource Wizard का प्रयोग करते हैं, तब DataSource Sidebar में हमें हमारे विभिन्न DataTable Objects उनकी Relationship के साथ दिखाई देते हैं। यानी यदि हम Customers DataTable के अन्तिम Column को देखें, तो अन्तिम Column के रूप में हमें “Orders” नाम का एक और DataTable Object दिखाई देता है।
इसी तरह से जब हम Orders व Products DataTable के अन्तिम Column के रूप में हमें “Order Details” नाम का Nested DataTable दिखाई देता है। इन विभिन्न Relationships आधारित DataTables को हम निम्न चित्रानुसार आसानी से Identify कर सकते हैं:
जब हम Drag-and-Drop तकनीक द्वारा Master/Detail या Parent/Child Form Design करना चाहते हैं, तब हमें Details/Child Table को Appropriate User Interface Control से Associate करके अपने उसी Form पर Drag-and-Drop करना होता है, जिस पर Master/Parent Table को Drag-and-Drop किया था।
उदाहरण के लिए यदि हम ये जानने के लिए कि किसी Customer ने कौन-कौन से Orders Place किए हैं, एक Master/Detail Form Design करना चाहें, तो Customers DataTable के User Interface को निम्न चित्रानुसार Details Set करेंगे और Orders DataTable को DataGridView Set करेंगे-
Master व Detail दोनों DataTables को Appropriate User Interface के साथ Set करने के बाद अपने Form पर हमें पहले Master DataTable को Drag-and-Drop करना होता है और फिर Detail DataTable को।
यहां ध्यान देने वाली बात ये है कि जब हम Details DataTable को Drag-and-Drop करते हैं, तब हमें हमेंशा उस Details DataTable को Drag-and-Drop करना चाहिए, जो कि Master DataTable के अन्तिम Column के रूप में Nested है, जैसाकि पिछले चित्र में हम देख सकते हैं, न कि उस Details DataTable को, जो कि Master DataTable के समान Level की Hierarchy में Exist है। परिणामस्वरूप हमारा Form कुछ निम्नानुसार दिखाई देता है:
अब जब हम इस Form को Run करते हैं, तो हमें निम्नानुसार Output प्राप्त होता है:
यानी बिना एक भी Line का Code लिखे हुए हम Visual Studio के DataSource Wizard द्वारा Generated Visual Strongly Typed DataTables की केवल Visual Settings को Use करते हुए भी बडी ही आसानी से एक Master/Detail यानी Parent/Child Relationship वाला Form Design कर सकते हैं, जो कि पूरी तरह से Running व Working है।
इस Form पर दिखाई देने वाले Navigator Object के माध्यम से जब हम अलग-अलग Customers के Row पर Navigate करते हैं, तो हर Customer द्वारा Place किए गए विभिन्न Orders की Information Automatically DataGridView Control में Show होने लगती है, जबकि अभी तक हमने एक भी Line का Manual Code नहीं लिखा है। हालांकि हमने कोई Code नहीं लिखा है, लेकिन फिर भी Visual Studio स्वयं हमारे लिए निम्नानुसार Appropriate Codes Generate करता है:
using System; using System.Data; using System.Windows.Forms; namespace DataSourceApp { public partial class frmDataSource : Form { public frmDataSource() { InitializeComponent(); } private void customersBindingNavigatorSaveItem_Click(object sender, EventArgs e) { this.Validate(); } private void frmDataSource_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'northwindDataSet.Orders' table. // You can move, or remove it, as needed. this.ordersTableAdapter.Fill(this.northwindDataSet.Orders); // TODO: This line of code loads data into the 'northwindDataSet.Customers' table. // You can move, or remove it, as needed. this.customersTableAdapter.Fill(this.northwindDataSet.Customers); } private void customersBindingNavigatorSaveItem_Click_1(object sender, EventArgs e) { this.Validate(); this.customersBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.northwindDataSet); } } }
जब हम DataSource Sidebar से Master DataTable को Drag-and-Drop करने के बाद Detail DataTable को Drag-and-Drop करते हैं, तो Form पर एक DataGridView Control Add होता है। जबकि इस DataTable के लिए भी Visual Studio IDE के निम्न चित्रानुसार ordersBindingSource व ordersTableAdapter नाम के दो नए Objects Add होते हैं:
यदि हम Form पर Place होने वाले DataGridView Control की DataSource Property को Properties Sidebar में Check करें, तो इस Property में ordersBindingSource मान Assigned होता है। यानी Form पर Place होने वाले DataGridView Control में जो Data आ रहा है, वह ordersBindingSource नाम के Source से आ रहा है।
जबकि यदि हम इस ordersBindingSource को Select करें, तो जैसाकि निम्न चित्रानुसार हम देख सकते हैं, इस Object की DataSource Property में customersBindingSource मान Assigned है:
जिसका मतलब ये है कि इस Object में जो Data आ रहा है, वह customersBindingSource नाम के Object से आ रहा है, जबकि customersBindingSource से Data Retrieve करने के लिए DataMember के रूप में FK_Orders_Customers नाम के DataRelation Object को Use किया जा रहा है, जो कि Customers व Orders DataTable के बीच की Relationship को Represent कर रहा है, जिसे हम निम्न चित्रानुसार Visual Studio के Strongly Typed DataSet Designer Window में Right Click करने पर Display होने वाले Popup Menu से “Show Relation Labels” Option को Click करके दोनों Tables के बीच की Relationship को Represent करने वाली Line से Associated Label के रूप में देख सकते हैं।
अथवा Visual Studio के Strongly Typed DataSet Designer Window में दिखाई देने वाली Relationship Line को Click करके Properties Window में दिखाई देने वाली Name Property को Check कर सकते हैं या फिर हम दोनों DataTables को आपस में जोडने वाली Line को Double Click कर सकते हैं, जिसके परिणामस्वरूप निम्न चित्रानुसार Relation Dialog Box Display होता है, जिसमें हम हमारी Relationship का नाम देख सकते हैं, जो कि FK_Orders_Customers ही है:
यानी हमें Form पर दिखाई देने वाले DataGridView Control में जो Data दिखाई दे रहा है, वह वास्तव में Customers व Orders Table के बीच की FK_Orders_Customers नाम की Foreign Key Relationship के माध्यम से आ रहा है, जो कि Customers व Orders DataTables के CustomerID Column के माध्यम से Linked हैं।
जैसाकि उपरोक्त Relation Dialog Box में हम देख सकते हैं कि DataSource Sidebar के माध्यम से जिन Related DataTables को हमने Access करके अपना Master/Detail Form Create किया है, वे Default रूप से Referential Integrity को Enforce नहीं करते। इसलिए इस Relation Dialog Box के माध्यम से हम DataTables के बीच की Referential Integrity को भी Accept Rule, Update Rule व Accept/Reject Rule के माध्यम से Enforce कर सकते हैं। जैसे:
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
ADO.NET with C# in Hindi | Page:501 | Format: PDF