ADO.NET DataTable Events

ADO.NET with C# in Hindi - BccFalna.com: TechTalks in Hindi ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

ADO.NET with C# in Hindi | Page:501 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

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 में ColumnChangingColumnChanged 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

TableClearedTableClearing 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-BasedRow-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 प्राप्त होता है:

ADO.NET DataTable Events - Hindi

ADO.NET DataTable Events – Hindi

जहां हम देख सकते हैं कि जैसे ही एक नया 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[0]["fname”] “Rahul”;

तो ये Statement Execute होने पर DataTable Object में Newly Added DataRow Object के DataColumn Object की Value में परिवर्तन होगा। परिणामस्वरूप हमें निम्नानुसार Output प्राप्त होगा:

ADO.NET DataTable Events - Hindi

ADO.NET DataTable Events – Hindi

और जैसाकि हम इस 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].[0]rong>Delete();

जहां Delete() Method tblAuthors नाम की हमारी DataTable के First Row को Delete कर रहा है, तो इस Deletion को Perform करने के लिए निम्नानुसार तरीके से DataTable Object के विभिन्न Row Deletion Events Fire होते हैं:

ADO.NET DataTable Events - Hindi

ADO.NET DataTable Events – Hindi

जहां हम देख सकते हैं कि पहले RowDeleting Method Fire होता और फिर RowDeleted Method Fire होता है।

इस प्रकार से हम समझ सकते हैं कि DataTable में Actual Change Perform होने से पहले ही ColumnChanging, RowChanging व RowDeleting Events Fire होते हैं इसलिए इन Events का प्रयोग सामान्यत: Data Validation के लिए किया जाता है और इस बात का पता लगाया जाता है कि Data Insert या Delete होने की Condition को Satisfy करता है या नहीं।

जबकि ColumnChanged, RowChangedRowDeleted Events, DataTable Object के Actual Data के Change होने के बाद Fire होते हैं, इसलिए इन Events को Cleanup Process के लिए Use किया जाता है।

यहां ColumnChangingRowChanging 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 किया है, उसी तरह से यदि हम चाहें तो TableClearingTableCleared 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 करने के रूप में किया जाता है।

ADO.NET DataSet Constraints Object
C# In Memory Database

******

ये पोस्‍ट Useful लगा हो, तो Like कर दीजिए।

ADO.NET with C# in Hindi - BccFalna.com: TechTalks in Hindi ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

ADO.NET with C# in Hindi | Page:501 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Download All Hindi EBooks

सभी हिन्दी EBooks C, C++, Java, C#, ASP.NET, Oracle, Data Structure, VB6, PHP, HTML5, JavaScript, jQuery, WordPress, etc... के DOWNLOAD LINKS प्राप्‍त करें, अपने EMail पर।

Register करके Login करें। इस Popup से छुटकारा पाएें।