DataView in C# – Working with DataView Object

DataView in C#: ADO.NET का DataView Object, DataTables के Select() Method से कुछ ज्यादा है। ये न केवल किसी Select() Method को DataTable के साथ Use करना चाहिए, न ही किसी DataTable को Directly किसी Frontend Control के साथ Bind करना चाहिए, साथ ही किसी DataTable के Rows की Query करना भी Performance की दृष्टि से Efficient नहीं होता। इसीलिए ADO.NET में DataView Object को Define किया गया है।

जिस तरह से DataSet Object एक In-Memory Database को Represent करता है, जिसमें DataTable Objects, In-Memory Table को Represent करते हैं व DataRelation Objects इन DataTables के बीच की Relationship को Represent करता है, ठीक इसी तरह से DataView Object एक In-Memory Database View को Represent करता है।

हालांकि ADO.NET का DataView व Database का View, दोनों काफी हद तक एक दूसरे के Similar है, फिर भी Database Views हमारे Arbitrary SQL Query पर आधारित होता है। इस SQL Query द्वारा ही त; होता है कि Database View में किन Tables के कौन-कौन से Columns Contained होंगे, जबकि एक Single Database View में Multiple Tables की Joining SQL Query से Generate होने वाले Resultset को भी Represent किया जा सकता है।

जबकि DataView Objects केवल किसी Single DataTable पर ही Apply हो सकता है। यानी हम किसी DataTable के Columns के Subset को DataView में Contain करने के लिए Select नहीं कर सकते। यानी हमारे DataView में Underlying DataTable के सभी Columns Contained होते हैं।

साथ ही जिस प्रकार से DataTable के Rows को Represent करने के लिए DataRows होते हैं, ठीक उसी प्रकार से हम DataRowViews का प्रयोग करके DataView की Rows को Access किया जा सकता है। इसी तरह से DataView.Table Property का प्रयोग करते हुए Underlying DataTables को Access व Manipulate कर सकते हैं, जबकि Underlying Row को Access करने के लिए DataRowView.Row property को Use कर सकते हैं।

Creating DataView

DataView Object Create करने के लिए ADO.NET हमें तीन Overloaded Versions के Constructors Provide करता है। पहला Constructor हमें बिना किसी प्रकार का Information Specify किए हुए एक Independent DataView Object Create करने की सुविधा Provide करता है, जिसे बाद में जरूरत के अनुसार DataSet Object में Add किया जा सकता है। इस Constructor को हम निम्नानुसार Use कर सकते हैं:

DataView dataViewCustomers = new DataView();

जबकि दूसरे Constructor का प्रयोग करके हम किसी DataTable को Create होने वाले DataView Object से Directly Tie यानी Bind कर सकते हैं। जैसे:

DataView dataViewCustomers = new DataView(dataTableCustomers);

जब हम इस Constructor का प्रयोग करके DataView Object Create करते हैं, तो इस Newly Created DataView Object को Setup करने के लिए हम इसकी विभिन्न प्रकार की Properties को बाद में जरूरत के अनुसार Configure कर सकते हैं।

DataView Create करने वाले तीसरे Constructor में हमें DataTable का नाम व विभिन्न प्रकार के Criteria जैसे कि Sorting, Searching RowState को भी Specify कर सकते हैं। जैसे:

	DataView dataViewCustomers = new DataView
	(
		dataTableProducts, 
		"ProductID=1", 
		"Product_Name", 
		DataViewRowState.Modified
	);

अत: यदि हम चाहें तो इस तीसरे Overloaded Version को Use करके DataView Object Create करने से सम्बंधित सभी जरूरी Information को इसी Constructor में एक Single Line में Specify कर सकते हैं या फिर हम पिछले दोनों Versions को Use कर सकते हैं और इन दोनों Versions को Use करने पर निम्नानुसार विभिन्न Properties का प्रयोग करते हुए अपने Newly Created DataSet Object को Configure कर सकते हैं:

RowFilter Property

इस Property का प्रयोग करके हम Selection Criteria को Specify कर सकते हैं। ये Criteria वैसा ही होता है, जैसा Criteria हम Select() Method में Pass करते हैं। ये Selection Criteria Underlying DataTable से Created DataView Object में Return होने वाले Rows को Filter करने की सुविधा देता है। उदाहरण के लिए यदि हम इस Property में “CustomerID=1” लिख दें, तो केवल वही Rows, DataView Object में Store होंगे, जो जिनका CustomerID 4 होगा।

Sort Property

इस Property का प्रयोग करके हम इस बात को Specify करते हैं कि DataView Object में Return होने वाले Rows किस Column के आधार पर Sorted होंगे।

RowStateProperty Property

जब हम DataTable के Rows में किसी प्रकार का Change करते हैं, तो हर DataTable अपने हर Record के साथ किए गए Change की एक History Manage करता है। इस Property का प्रयोग करके हम DataTable द्वारा Manage की जा रही History के आधार पर DataView Object में Contain होने वाले Records का Selection कर सकते हैं।

इन Properties के अलावा हम निम्नानुसार Find FindRows Methods का प्रयोग करके DataView Object के किसी Particular DataRowViews Object को Search कर सकते हैं, जिनका Description निम्नानुसार है:

Find() Method

ये Method, DataTable के DataTable.Rows.Find() Method के समान ही काम करता है, लेकिन Exactly समान नहीं होता। ये Method हमें Criteria Specify करने की सुविधा देता है, जिसके आधार पर उन Columns पर Searching Apply की जा सकती है, जिन्हें DataView.Sort Property में Set किया गया होता है। यानी Find() Method हमेंशा इस Sort Property में Specify किए गए Column पर ही Apply होता है। ये Method Criteria के आधार पर Match होने वाले Row का Index Number Return करता है।

FindRows() Method

ये Method Use करके हम Specified Criteria के आधार पर सभी Matching DataRowView Objects Return करता है। Find() व FindRows() Methods में मुख्‍य अन्तर ये है कि FindRows() Method, Multiple DataRowView Objects Return कर सकता है जो कि एक DataRowView Objects का Array होता है जबकि Find() Method केवल Matched Record का Index Number Return करता है।

DataView Object की Working को बेहतर तरीके से समझने के लिए हम एक Windows Forms Application Create कर सकते हैं, जिसका Main Form Design कुछ निम्नानुसार है:

DataView in C# - Working with DataView Object - Hindi

इस Form के Memory में Load होते ही Form की Class में हमने निम्नानुसार Properties Define की हैं, ताकि इन Properties की Values को Form के विभिन्न Methods व Event Handlers Common रूप से Access व Manipulate कर सकें:

        private string connectionString = null;
        private SqlConnection con = null;
        private SqlDataAdapter daCustomer = null;
        private DataTable dtCustomer = new DataTable();
        private DataView dvCustomers = null;

जब Form Memory में Load होता है, तो Form Load Event Fire होता है जिसके Response में निम्नानुसार Form Load Event Handler Code Execute होता है:

        private void frmAccessingMultipleTable_Load(object sender, EventArgs e)
        {
            //Configuring Connection String and Creating Connection
            this.connectionString= "Data Source=.\\SQLSERVEREXPRESS;Initial Catalog=Northwind;Integrated Security=True";
            con = new SqlConnection(this.connectionString);

            //Configuring DataAdapter for Get/Set Data from/to Underlying Database
            daCustomer = new SqlDataAdapter("SELECT * FROM Customers", con);
            
            //Filling data in DataTable
            daCustomer.Fill(dtCustomer);
        }

ये Code Underlying Database की Customers नाम की Table के Data को daCustomers नाम के DataAdapter Object के माध्‍यम से dtCustomer नाम के DataTable Object में Fill कर देता है। फिर जब हम Form पर दिखाई देने वाले “Load DataView” नाम के Button पर Click करते हैं, तो Event Handler के रूप में निम्न Code Execute होता है:

        private void btnLoadDV_Click(object sender, EventArgs e)
        {
            dvCustomers = new DataView(dtCustomer);
            dgvCommon.DataSource = dvCustomers;
        }

इस Event Handler में सबसे पहले dvCustomers नाम के DataView Object में dtCustomer नाम के DataTable Object में Stored Records को Fill किया गया है और फिर Form पर दिखाई देने वाले dgvCommon नाम के DataGridView Control की DataSource Property में इस DataView Object को ठीक उसी तरह से Assign किया गया है, जिस तरह से हम किसी DataTable को Assign करते हैं। परिणामस्वरूप हमें हमारा Main Form कुछ निम्नानुसार दिखाई देने लगता है, जिसके DataGridView Control में Customers Table का Data Sow होता है:

DataView in C# - Working with DataView Object - Hindi

फिर जब हम “Sort DataView” Button पर Click करते हैं, तब निम्न Event Handler Code Execute होता है:

        private void btnSortDV_Click(object sender, EventArgs e)
        {
            dvCustomers.Sort = "City ASC";
        }

ये Code dvCustomers नाम के हमारे DataView Object में Contained Data को City के आधार पर Ascending Order में Sort कर देता है, जिसका Instant Effect हमें हमारे Form पर दिखाई देने वाले DataGridView Control में निम्न चित्रानुसार दिखाई देता है:

DataView in C# - Working with DataView Object - Hindi

इसी तरह से जब हम “Filter DataView” Button पर Click करते हैं, तो इस Click Event के Response में निम्न Event Handler Code Execute होता है:

        private void btnFilterDV_Click(object sender, EventArgs e)
        {
            dvCustomers.RowFilter= "City LIKE 'B%'";
        }

इस Event Handler के Execute होते ही RowFilter Property में Specified Criteria के कारण DataGridView Control में केवल वे ही Records बचते हैं, जो कि Specified Criteria को Follow करते हैं।

चूंकि हमने Criteria के रूप में “City LIKE ‘B%’” Specify किया है, जिसका मतलब ये है कि केवल उन City से सम्बंधित Rows ही हमारे DataView Object में रहें, जिनके नाम की शुरूआत B से होती है, इसलिए इस Event Handler के Execute होते ही हमारे Main Form पर Placed DataGridView Control Object कुछ निम्नानुसार Modify हो जाता है, जिसमें केवल वे ही Rows हैं, जिनके नाम की शुरूआत Character “B” से हो रहा है:

DataView in C# - Working with DataView Object - Hindi

अन्त में जब हम “Find DataRow” नाम के Button पर Click करते हैं, तो इस Click Event के Response में निम्नानुसार Event Handler Execute होता है:

        private void btnFindDV_Click(object sender, EventArgs e)
        {
            DataRowView[] drvs = dvCustomers.FindRows("Berlin");
            foreach (DataRowView drv in drvs)
            {
                MessageBox.Show(drv.Row["ContactName"] + " " + drv.Row["ContactTitle"], "Selected Item");
            }
        }

इस Event Handler में सबसे पहले dvCustomers DataView के साथ FindRows() Method का प्रयोग करते हुए निम्नानुसार Statement Specify किया गया है:

            DataRowView[] drvs = dvCustomers.FindRows(“Berlin”);

ये Statement drvs नाम का एक नया DataRowView Type का Array Create करता है, जिसमें केवल वे Rows Store होते हैं, जिनकी “City” Berlin है, क्योंकि हमने हमारे DataView Object को City Column के लिए ही Sort किया है।

DataView in C# - Working with DataView Object - Hindi

परिणामस्वरूप जब foreach Statement Execute होता है, तो drvs Object में Stored हर Row के लिए एक MessageBox Object Display होता है, और हर Row के ContactName + ContactTitle के Concatenation को निम्नानुसार Display करता है:

अब इसी Application को एक बार और Run कीजि, और Form पर दिखाई देने वाले “Load DataView” Button पर Click करके बिना “Sort DataView” Button पर Click किए हुए सीधे ही “Find DataView” Button पर Click कर दीजिए।

यदि हम बिना “Load DataView” Button पर Click करके सीधे ही “Find DataView” Button पर Click कर देते हैं, तो Visual Studio हमें निम्न चित्रानुसार एक Error Message Display करते हुए हमारे Application को Break कर देता है:

DataView in C# - Working with DataView Object - Hindi

ऐसा इसलिए होता है क्योंकि जब तक हम DataView Object की Sort Property में किसी Column को Set करके DataView की Sorting नहीं करते, तब तक हम DataView के साथ Find() या FindRows() Method को Use नहीं कर सकते क्योंकि ये दोनों Methods एक Sorted Column पर ही Perform होते हैं।

इस प्रकार से हम एक DataView Object को DataTable Object के Alternative के रूप में Use कर सकते हैं। यानी एक DataTable Object पर हम जिन भी Operations (INSERT, UPDATE, DELETE, UPDATE) Operations को हम DataView Object पर भी Perform कर सकते हैं।

Converting DataView to DataTable

हम किसी DataView Object के आधार पर नया DataTable Object भी बडी ही आसानी से Create कर सकते हैं। इस Conversion का मुख्‍य Benefit ये है कि हम बडी ही आसानी से किसी एक DataTable से Retrieve होने वाले Rows के आधार पर एक नया DataTable Object Create कर सकते हैं। DataView से DataTable के इस Conversion को निम्नानुसार Perform किया जा सकता है:

	DataTable dtCustomers = new DataTable();
	DataView dvCustomers = new DataView(dtCustomers);

	dvCustomers.RowFilter = "CustomerID < 100";

	DataView dtSubSet = dvCustomers.ToTable[];
	//OR
	DataView dtSubSet = dvCustomers.ToTable["HundredCustomersOnly"];

हम किसी भी तरीके का प्रयोग करते हुए DataView को DataTable में Convert करें, दोनों ही तरीकों से Create होने वाले नए DataTable के सभी Columns Original DataTable के समान ही होते हैं।

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 GET DEMO REVIEWS