Event Handling in Template – कुछ परिस्थितियों में हमें उन Controls द्वारा Trigger किए गए Events को Handle करने के लिए Event Handlers लिखने की जरूरत पडती है, जिन्हें हमने इन Template Columns में Add किया होता है।
उदाहरण के लिए मानलो कि हम हमारे Template Column में किसी ImageButton Control को Include करते हैं और उसके Click होने के Response में कोई Task Complete करना चाहते हैं। इस जरूरत को पूरा करने के लिए हम निम्नानुसार Markup द्वारा Template Tag Create कर सकते हैं:
[code] <asp:TemplateField HeaderText = "Status"> <ItemTemplate> <asp:ImageButton ID="imgButton" runat="server" ImageUrl="imgButton.gif" /> </ItemTemplate> </asp:TemplateField> [/code]
यहां समस्या ये है कि यदि हम हमारे Control को Template में Add करते हैं, तो GridView Control प्रत्येक Data Item के लिए समान ImageButton Control की Multiple Copies Create कर देता है।
इसलिए जब ImageButton को Click किया जाता है, तब हमें एक ऐसे तरीके की जरूरत होती है, जो इस बात को तय कर सके कि जिस ImageButton को Click किया गया है, वह किस Row से सम्बंधित ImageButton है। ताकि हम जो भी Operation Perform करें, वह उसी Row के Data के लिए Perform हो।
इस समस्या के समाधान के लिए हम GridView Control के किसी Event को Use कर सकते हैं, न कि Contained Button को। जहां GridView.RowCommand Event हमारी इस जरूरत को पूरा करता है, क्योंकि हम जब भी कभी किसी Template Button को Click करते हैं, ये Event Fire होता है तथा वह Triggered Event, Event Bubbling के आधार पर Bubble होकर Processing के लिए उपलब्ध हो जाता है।
यद्धपि अभी भी हमें प्रत्येक Row को Uniquely Identify करने के लिए RowCommand Event को Row से सम्बंधित Information Pass करना जरूरी होता है और इस जरूरत को हम CommandName व CommandArgument नाम की दो String Properties द्वारा पूरा करते हैं, जहां CommandName हमारे उस Control का एक Description Name होता है, जिसे हमने अपने Template में Place किया था, जबकि CommandArgument उस Button को Pass होने वाले Extra Arguments होते हैं और इन Specific Information को हम निम्नानुसार Data Binding Expression के अन्तर्गत Specify कर सकते हैं:
[code] <asp:TemplateField HeaderText = "Status"> <ItemTemplate> <asp:ImageButton ID = "imgButton" runat = "server" ImageUrl = "imgButton.gif" CommandName = "StatusClick" CommandArgument = ' < %# Eval("ProductID") % > ' /> </ItemTemplate> </asp:TemplateField> [/code]
और TemplateField को उपरोक्तानुसार Specify करने के बाद उसके द्वारा Trigger होने वाले Event को Response करने के लिए हम निम्नानुसार Event Handler भी Create कर सकते हैं:
[code] protected void GridView1_RowCommand (object sender, GridViewCommandEventArgs e) { if (e.CommandName == "StatusClick") lblInfo.Text = "You clicked product #" + e.CommandArgument.ToString(); } [/code]
जब हम अपने Template के किसी ImageButton Control को Click करते हैं, तो उस Clicked Row का ProductID हमें एक Label Control में दिखाई देता है और ऐसा इसलिए होता है क्योंकि प्रत्येक Row के साथ Associated ImageButton Control का CommandName हम उपरोक्तानुसार Event Handler के माध्यम से Check करते हैं, ताकि प्रत्येक Row के साथ Associated ImageButton को Uniquely Identify किया जा सके।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Advance ASP.NET WebForms with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Advance ASP.NET WebForms in Hindi | Page:707 | Format: PDF