Editing with Simple GridView Templates Controls – Templates को Use करने का एक मुख्य कारण Better Editing Experience Provide करना ही है। जहां पिछले Chapter में हमने देखा था कि जब हम किसी Record को Edit करना चाहते थे, तब सभी Fields के साथ Editing से सम्बंधित Basic Capabilities Automatically Add हो जाती थीं।
यानी सभी Fields के साथ एक उपयुक्त Control Add हो जाता था, जिससे कि हम उसके Data को Change कर सकें और साथ ही GridView.EditIndex Property “Edit” Mode में Set हो जाती थी, जो इस बात का Indication होता है कि Current Record को Edit किया जा रहा है।
Editing को Possible करने का सबसे सरल तरीका यही होता है कि हम CommandField Column को Add करें और उसकी ShowEditButton Property को अथवा GridView.AutoGenerateEditButton Property को True Set करें। हम दोनों में से चाहे जो भी तरीका Use करें, हमें एक ऐसा Column प्राप्त होता है, जिसका प्रयोग Editing Commands को Show करने के लिए किया जा सकता है।
Initial रूप से ये Column प्रत्येक Rowके लिए “Edit” नाम का एक Hyperlink Display करता है। परिणामस्वरूप जब User इस Edit Hyperlink को Click करता है, तो हमारे Row का प्रत्येक Label एक TextBox Control से Replace हो जाता है, जबकि उस Field का Data Read-Only न हो।
हमें ASP.NET द्वारा जो Standard Editing Mode प्राप्त होता है, उसकी काफी Limitations हैं, जिसके अन्तर्गत Data Edition के दौरान सभी प्रकार के Data एक TextBox Control के माध्यम से ही Edit हो सकते हैं। जबकि कई Data ऐसे होते हैं, जिन्हें Drop-Down List Controls, Multiline TextBoxes, Radio Buttons, Checkboxes आदि द्वारा ज्यादा बेहतर तरीके से Represent व Handle किया जा सकता है। इतना ही नहीं Default रूप से प्राप्त होने वाले Editing Features के अन्तर्गत हम किसी प्रकार का Validation नहीं कर सकते।
लेकिन यदि हम EditItemTemplate का प्रयोग करते हैं, तो उस स्थिति में हम Validator Controls का प्रयोग करते हुए Validation को Perform कर सकते हैं, जो कि Standard Editing Mode में सम्भव नहीं है। साथ ही हम Different प्रकार के Data के लिए Different प्रकार के Editing Controls का चुनाव कर सकते हैं और उसके Position व Layout को भी Control कर सकते हैं।
इस Template को बेहतर तरीके से समझने के लिए हम हमारे पिछले Example को ही निम्नानुसार Modify कर सकते हैं:
[code] File Name: Test.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="GridView.Test" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:SqlDataSource ID="sourceEmployee" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>" SelectCommand="SELECT * FROM [Employees]"></asp:SqlDataSource> <br /> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="sourceEmployee" DataKeyNames="EmployeeID" AutoGenerateEditButton="True" > <Columns> <asp:TemplateField> <ItemTemplate> <b> <%# Eval("EmployeeID") %> - <%# Eval("TitleOfCourtesy") %> <%# Eval("FirstName") %> <%# Eval("LastName") %> </b> <hr /> <small><i> <%# Eval("Address") %><br /> <%# Eval("City") %>, <%# Eval("Country") %>, <%# Eval("PostalCode") %><br /> <%# Eval("HomePhone") %></i> <br /> <br /> <%# Eval("Notes") %> </small> </ItemTemplate> <EditItemTemplate> <b> <%# Eval("EmployeeID") %> - <%# Eval("TitleOfCourtesy") %> <%# Eval("FirstName") %> <%# Eval("LastName") %> </b> <hr /> <small><i> <%# Eval("Address") %><br /> <%# Eval("City") %>, <%# Eval("Country") %>, <%# Eval("PostalCode") %><br /> <%# Eval("HomePhone") %></i> <br /> <br /> <asp:TextBox runat="server" id="textBox" TextMode="MultiLine" Width="413px" Text='<%# Bind("Notes") %>' /> </small> </EditItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html> [/code]
जब हम इस Webpage को Run करते हैं, तो इस बार हमें निम्नानुसार Output प्राप्त होता है, जहां दिखाई देने वाले “Edit” Hyperlink को Click करने पर Associated Record का केवल “Notes” Field ही Editing के लिए Available होता है:
हम देख सकते हैं कि इस बार हमें हमारा “Notes” Field का Data एक Standard TextBox Control के रूप में नहीं बल्कि एक Multiline TextBox के रूप में दिखाई दे रहा है और ऐसा इसलिए हो रहा है, क्योंकि इस Example में हमने Bind() Method का प्रयोग करते हुए EditItemTemplate को निम्नानुसार Specify किया है:
[code] <asp:TextBox runat="server" id="textBox" TextMode="MultiLine" Width="413px" Text='<%# Bind("Notes") %>' /> [/code]
जब हम किसी Editable Value को किसी Control के साथ Bind करते हैं, तब हमें अपने Data Binding Expression के साथ Eval() Method के स्थान पर Bind() Method को Use करना पडता है। क्योंकि केवल Bind() Method ही हमारे Editing Control व Server के बीच Two-Way Link Create करता है, जिसकी वजह से Editing Control द्वारा Edit करके Update की गई Values फिर से Server पर Sent होकर Updated Data के रूप में Retrieve होती हैं।
जब हम GridView Control का प्रयोग करते हुए Updates को Commit करते हैं, तब एक और महत्वपूर्ण बात हमें ध्यान में रखना जरूरी होता है कि ये केवल Editable Bound Parameters को ही Submit करता है, न कि पूरे Record को।
यानी यदि हम उपरोक्त Example के आधार पर समझें, तो “Notes” Field को Edit करके Update करने पर केवल इसी Field का Data Underlying Database पर Update होने के लिए जाता है, पूरा Record नहीं, इसलिए Bind() Method में हमें केवल एक ही Parameter को Use करना पडता है। इसलिए हम हमारे Current Example में UPDATE SQL Statement को निम्नानुसार Specify कर सकते हैं:
[code] UPDATE Employees SET Notes=@Notes WHERE EmployeeID=@EmployeeID" [/code]
जबकि पिछले Chapter में हमने जो भी UPDATE SQL Statements लिखे थे, उनमें प्रत्येक Field को Update किया था, जिसकी वजह से Performance Issue का भी हमें अलग से ध्यान रखना जरूरी था, बल्कि इस प्रकार के UPDATE Sql Statement से Underlying Database पर भी कम Operations Perform होते, जिससे SQL Query के Execution में कम समय लगता है। साथ ही Client व Server के बीच Data Transfer भी कम होता है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Advance ASP.NET WebForms with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Advance ASP.NET WebForms in Hindi | Page:707 | Format: PDF