ADO.NET DataTable Events: .NET Framework के अन्य बहुत सारे Objects की तरह ही DataTable के साथ भी Events का एक Set Exist है। इसलिए हम इन Events का प्रयोग करते हुए भी User Interface को जरूरत के अनुसार Update कर सकते हैं अथवा Edited या Deleted Data को Commit करने से पहले Validate कर सकते हैं।
MarshalByValueComponent.Disposed से Inherited Events को यदि Include न करें, तो भी DataTable Object के साथ कुल 9 Events Available होते हैं और ये सभी Events काफी हद तक Similar Arguments Accept करते हैं और काम भी समान तरीके से करते हैं। DataTable के साथ उपलब्ध विभिन्न Events निम्नानुसार हैं:
ColumnChanging Event
ये Event तब Fire होता है जब किसी DataRow में Specified DataColumn में Stored मान में कोई Change हो रहा होता है।
ColumnChanged Event
ये Event तब Fire होता है जब किसी DataRow में Specified DataColumn में Stored मान में कोई Change हो चुका होता है।
RowChanging Event
ये Event तब Fire होता है जब किसी DataRow में Change हो रहा होता है। जब भी कभी DataRow Object के किसी Column के मान में Change होने की वजह से ColumnChanging Event Fire होता है, ColumnChanging Event के Fire होते ही, ये Event भी Fire हो जाता है।
RowChanged Event
ये Event तब Fire होता है जब किसी DataRow में Change हो चुका होता है।
RowDeleting Event
ये Event तब Fire होता है जब किसी DataRow Delete हो रहा होता है।
RowDeleted Event
ये Event तब Fire होता है जब किसी DataRow Delete हो चुका होता है।
TableClearing Event
ये Event तब Fire होता है जब किसी DataTable Clear हो रहा होता है।
TableCleared Event
ये Event तब Fire होता है जब किसी DataTable Clear हो चुका होता है।
TableNewRow Event
ये Event तब Fire होता है जब नया Row Generate होता है।
DataColumnChangeEventArgs Properties
सभी DataTable Events समान तरीके से काम करते हैं। Column Related Event Handlers DataColumnChangeEventArgs Object में ColumnChanging व ColumnChanged Events Receive करते हैं, जिसकी निम्न Properties होती है:
Column Property
इस Property से DataColumn Object की Change की जाने वाली Value को Retrieve किया जा सकता है।
ProposedValue Property
इस Property में DataColumn Object की Proposed Value यानी जिस Value से DataColumn को Update किया जा रहा है, को Get या Set किया जा सकता है। ये वही नया मान होता है, जिसे DataColumn में Assign किया जा रहा होता है।
उदाहरण के लिए ColumnChanging Event Handler में हम इस Property को Evaluate करके इस बात का निर्ण; ले सकते हैं कि हमें DataColumn में किए जाने वाले Change को Accept करना है या नहीं।
Row Property
इस Property को Use करके हम Changing Value के साथ DataRow Object को Get कर सकते हैं।
DataRowChangeEventArgs Properties
जिस तरह से Column Related Event Handler की कुछ Properties होती हैं, उसी तरह से TableNewRow Event को छोडकर RowChanging, RowChanged, RowDeleting व RowDeleted Row Related Event Handlers की भी निम्नानुसार दो Properties होती हैं:
Action Property
इस Property का प्रयोग करके हम DataRow Object पर Fire होने वाले Actions (Added, Changed, Deleted, etc…) को Get कर सकते हैं।
Row Property
इस Property का प्रयोग करके हम उस DataRow Object को Get कर सकते हैं, जिस पर Action Perform होता है।
DataTableClearTableEventHandler Properties
TableCleared व TableClearing Event Handlers DataTableClearTableEventHandler Object Receive करता है, जिसकी निम्न Properties होती हैं:
Table Property
इस Property का प्रयोग करके हम उस Table को Get कर सकते हैं, जो Clear हो रही होती है।
TableName Property
इस Property का प्रयोग करके हम उस Table के नाम को Get कर सकते हैं, जो Clear हो रही होती है।
TableNamespace Property
इस Property का प्रयोग करके हम किसी Table के Namespace को Get कर सकते हैं। इस Property का प्रयोग सामान्यत: तब किया जाता है, जब हम XML Conversion कर रहे होते हैं।
DataTableNewRowEventHander Properties
TableNewRow Event Handler, DataTableNewRowEventHander नाम का एक Object Receive करता है, जिसमें Row नाम की केवल एक ही Property होता है, जो कि ।कक होने वाले Row को Represent करता है।
इस प्रकार से जैसाकि हमने उपरोक्त Discussion से समझा कि DataTable Events को मूल रूप से निम्नानुसार तीन मुख्य भागों में Divide किया जा सकता है:
Column-Based: ColumnChanging, ColumnChanged
Row-Based: RowChanging, RowChanged, RowDeleting, RowDeleted
Table-Based: TableClearing, TableCleared, TableNewRow
सामान्यत: Column-Based व Row-Based Events को Existing Data को Control करने के लिए Validate किया जा सकता है। जबकि TableNewRow Event को Values Set करने के लिए तथा Newly Created व Inserted Rows में इसी प्रकार के अन्य Action Items को Set करने के लिए Validate किया जा सकता है, जिसे बाद में DataTable में Add करना है।
सामान्यत: DataTable Object के ये सभी Events एक निश्चित क्रम में Fire होते हैं, जिसे हम निम्नानुसार Use कर सकते हैं:
tblAuthors.ColumnChanged =+ new DataColumnChangeEventHandler(tblAuthors_ColumnChanged) tblAuthors.ColumnChanging =+ new DataColumnChangeEventHandler(tblAuthors_ColumnChanging) tblAuthors.RowChanged =+ new DataRowChangeEventHandler(tblAuthors_RowChanged) tblAuthors.RowChanging =+ new DataRowChangeEventHandler(tblAuthors_RowChanging) tblAuthors.RowDeleted =+ new DataRowDeletedEventHandler(tblAuthors_RowDeleted) tblAuthors.RowDeleting =+ new DataRowDeletingEventHandler(tblAuthors_RowDeleting)
जब एक बार हम उपरोक्तानुसार तरीके से Columns व Rows के लिए DataTable Object के विभिन्न Fire होने वाले Events को Describe कर देते हैं, उसके बाद हमें हर Event Hander में Add किए गए Callback Methods को Define करना होता है। जैसे:
private static void tblAuthors_ColumnChanged (object sender, DataColumnChangeEventArgs e) { Console.WriteLine("tblAuthors_ColumnChanged"); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); } private static void tblAuthors_ColumnChanging (object sender, DataColumnChangeEventArgs e) { Console.WriteLine("tblAuthors_ColumnChanging"); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); } private static void tblAuthors_RowChanged (object sender, DataColumnChangeEventArgs e) { Console.WriteLine("tblAuthors_RowChanged"); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); } private static void tblAuthors_RowChanging (object sender, DataColumnChangeEventArgs e) { Console.WriteLine("tblAuthors_RowChanging "); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); } private static void tblAuthors_RowDeleted (object sender, DataColumnChangeEventArgs e) { Console.WriteLine("tblAuthors_RowDeleted"); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); } private static void tblAuthors_RowDeleting (object sender, DataColumnChangeEventArgs e) { Console.WriteLine("tblAuthors_RowDeleting"); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); }
अभी तक के DataTable Related Discussion को यदि हम एक Console Mode Program के रूप में Implement करें, तो हमारा Program कुछ निम्नानुसार बनेगा:
using System; using System.Data; using System.Data.SqlClient; namespace DBApplication { class Program { static void Main(string[] args) { //Create DataTable Object DataTable tblAuthors = new DataTable("authors"); //Add DataColumns to the DataTable Object tblAuthors.Columns.Add("au_id", typeof(System.Int32)); tblAuthors.Columns.Add("fname", typeof(System.String)); tblAuthors.Columns.Add("lname", typeof(System.String)); //Setup Primary Key in the DataTable Object tblAuthors.PrimaryKey = new DataColumn[] { tblAuthors.Columns["au_id"] }; //Setup other properties to Key Column in the DataTable Object tblAuthors.Columns["au_id"].AutoIncrement = true; tblAuthors.Columns["au_id"].ReadOnly = true; tblAuthors.Columns["au_id"].AutoIncrementSeed = 1; tblAuthors.ColumnChanged += tblAuthors_ColumnChanged; tblAuthors.ColumnChanging += tblAuthors_ColumnChanging; tblAuthors.RowChanged += tblAuthors_RowChanged; tblAuthors.RowChanging += tblAuthors_RowChanging; tblAuthors.RowDeleted += tblAuthors_RowDeleted; tblAuthors.RowDeleting += tblAuthors_RowDeleting; //Creating new DataRow with same schema as the DataTable DataRow tempRow = tblAuthors.NewRow(); //Add the DataRow to the DataTable Console.WriteLine("\nAfter adding new row in the DataTable"); tblAuthors.Rows.Add(tempRow); //Set Column Values //Console.WriteLine("\nAfter modifying fname Column Value"); //tblAuthors.Rows[0]["fname"] = "Rahul"; } static void tblAuthors_RowDeleting(object sender, DataRowChangeEventArgs e) { Console.WriteLine("tblAuthors_RowDeleting"); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); } static void tblAuthors_RowDeleted(object sender, DataRowChangeEventArgs e) { Console.WriteLine("tblAuthors_RowDeleted"); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); } static void tblAuthors_RowChanging(object sender, DataRowChangeEventArgs e) { Console.WriteLine("tblAuthors_RowChanging "); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); } static void tblAuthors_RowChanged(object sender, DataRowChangeEventArgs e) { Console.WriteLine("tblAuthors_RowChanged"); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); } static void tblAuthors_ColumnChanging(object sender, DataColumnChangeEventArgs e) { Console.WriteLine("tblAuthors_ColumnChanging"); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); } static void tblAuthors_ColumnChanged(object sender, DataColumnChangeEventArgs e) { Console.WriteLine("tblAuthors_ColumnChanged"); Console.WriteLine("\tValue: " + e.Row["fname"].ToString()); Console.WriteLine("\tRowState: " + e.Row.RowState.ToString()); } } }
तो इस Program को Run करते ही हमें निम्नानुसार Output प्राप्त होता है:
जहां हम देख सकते हैं कि जैसे ही एक नया DataRow Object, DataTable में Add होता है, पहले RowChanging Event Fire होता है और फिर RowChanged Event Fire होता है। जबकि यदि हम इसी Program में इस Newly Added Row के fname Column में Value Add करें, यानी यदि हम इसी Program में Comment के रूप में Specified निम्न Code को:
//Set Column Values
//Console.WriteLine(“\nAfter modifying fname Column Value”);
//tblAuthors.Rows[0][“fname”] = “Rahul”;
Uncomment करके निम्नानुसार Specify कर दें:
//Set Column Values
Console.WriteLine(“\nAfter modifying fname Column Value”);
tblAuthors.Rows[0][“fname”] = “Rahul”;
तो ये Statement Execute होने पर DataTable Object में Newly Added DataRow Object के DataColumn Object की Value में परिवर्तन होगा। परिणामस्वरूप हमें निम्नानुसार Output प्राप्त होगा:
और जैसाकि हम इस Output में देख सकते हैं कि जब fname Column का मान Change होता है, तब सबसे पहले ColumnChanging Event Fire होता है, फिर ColumnChanged Event Fire होता है, फिर RowChanging Event Fire होता है और अन्त में RowChanged Event Fire होता है।
इसी प्रकार से इसी Program में यदि हम Newly Added Row को Delete करने के लिए निम्नानुसार Statement लिखें:
//Delete first row of the DataTable Object
Console.WriteLine(“\nAfter deleting first row of the DataTable”);
tblAuthors.Rows[0].Delete();
जहां Delete() Method tblAuthors नाम की हमारी DataTable के First Row को Delete कर रहा है, तो इस Deletion को Perform करने के लिए निम्नानुसार तरीके से DataTable Object के विभिन्न Row Deletion Events Fire होते हैं:
जहां हम देख सकते हैं कि पहले RowDeleting Method Fire होता और फिर RowDeleted Method Fire होता है।
इस प्रकार से हम समझ सकते हैं कि DataTable में Actual Change Perform होने से पहले ही ColumnChanging, RowChanging व RowDeleting Events Fire होते हैं इसलिए इन Events का प्रयोग सामान्यत: Data Validation के लिए किया जाता है और इस बात का पता लगाया जाता है कि Data Insert या Delete होने की Condition को Satisfy करता है या नहीं।
जबकि ColumnChanged, RowChanged व RowDeleted Events, DataTable Object के Actual Data के Change होने के बाद Fire होते हैं, इसलिए इन Events को Cleanup Process के लिए Use किया जाता है।
यहां ColumnChanging व RowChanging Events के सन्दर्भ में एक और ध्यान देने वाली बात ये है कि ColumnChanging Event, DataTable के Column में Actual Data Change होने से पहले Execute होता है जबकि RowChanging Event, RowState Change होने से पहले Execute होता है।
जिस तरह से पिछले Example Program में हमने Column व Row से सम्बंधित Events के बारे में समझने के लिए विभिन्न Event Handlers को tblAuthors DataTable Object के साथ Attach किया है, उसी तरह से यदि हम चाहें तो TableClearing व TableCleared Events के Execute होने की स्थिति जानने के लिए हम इन दोनों Events को भी tblAuthors DataTable Object के साथ निम्नानुसार तरीके से Add सकते हैं:
{ … tblAuthors.TableClearing += tblAuthors_TableClearing; tblAuthors.TableCleared += tblAuthors_TableCleared; tblAuthors.Clear(); … } static void tblAuthors_TableCleared(object sender, DataTableClearEventArgs e) { Console.WriteLine("tblAuthors_TableCleared"); } static void tblAuthors_TableClearing(object sender, DataTableClearEventArgs e) { Console.WriteLine("tblAuthors_TableClearing"); }
इसी तरह से हम TableNewRow Event के Fire होने की स्थिति में Perform किए जाने वाले Tasks के लिए भी निम्नानुसार तरीके से Event Handler Register कर सकते हैं:
//Creating new DataRow with same schema as the DataTable DataRow tempRow = tblAuthors.NewRow(); static void tblAuthors_TableNewRow(object sender, DataTableNewRowEventArgs e) { Console.WriteLine("tblAuthors_TableNewRow"); }
चूंकि ये Event तब Fire होता है जब किसी DataTable Object में नया Row Add किया जाता है, इसलिए New Row Create करते समय हमें जिन Business Logics को Specify करना होता है, उन्हें हमें इसी Event Handler में Specify करना होता है।
जहां सभी DataTable Events हमें उस समय किसी Add, Delete या Modify हो रहे Row के साथ प्रक्रिया करने की सुविधा देते हैं, जो कि DataTable Object के Collection में Currently Available होता है, वहीं TableNewRow Event हमें किसी DataRow की Values को Business Rules के आधार पर Modify करने की सुविधा Provide करता है। इस Events का Practical Use किसी DataTable के लिए Row Generator Codes को Specify करने के रूप में किया जाता है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
ADO.NET with C# in Hindi | Page:501 | Format: PDF