Dynamic Control Creation

Dynamic Control Creation – Controls Collection का प्रयोग करते हुए हम किसी भी Container में Dynamically नया Control Add कर सकते हैं। इसे समझने के लिए हम हमारी Code-Behind File को निम्नानुसार Modify कर सकते हैं:


File Name: Default.aspx.cs
using System;
using System.Web.UI;
using System.Web.UI. htmlControls;
using System.Web.UI.WebControls;
namespace WebForms
{
  public partial class Default : System.Web.UI.Page
 {
  protected void Page_Load(object sender, System.EventArgs e)
  {
    //Creating Button Control Dynamically
    Button dynaButton = newButton();
    dynaButton.Text = "Dynamically Created Button";
    dynaButton.ID = "btnDCB";

    //Add to Controls Collection of Page.
    By.Controls.Add(dynaButton);
  }
 }
}

जबकि इस Code-Behind File की.aspx File निम्नानुसार है:


File Name: Default.aspx
<%@Page
Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebForms.Default" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/x html">
<head runat="server">
<title></title>
</head>
<body>
 <form id="By" runat="server">
</form>
</body>
</html>

जब हम इस Webpage को Run करते हैं, तो हमें निम्नानुसार Resultant Webpage प्राप्त होता है, जिस पर एक Button Placed होता है, जबकि हमने हमारी Default.aspx File में स्थित <form> Element में कोई Button Create नहीं किया है:

Dynamic Control Creation - Core ASP.NET WebForms using C# in Hindi

क्योंकि जब ये Webpage Run होता है, तो Code-Behind File केPage_Load() Method के Execute होते ही निम्न Code Execute होते हैं, जो कि एक Button Type का Control Create करते हैं और उस Control के TextID Field को Set करते हैं, ताकि उस Control को फिर से Access व Manipulate किया जा सके-


//Creating Button Control Dynamically
Button dynaButton = newButton();
dynaButton.Text = "Dynamically Created Button";
dynaButton.ID = "btnDCB";

हालांकि ये Code एक Button Create करता है, लेकिन वह Button ASP.NET Server की Memory में ही Create होता है। इस Button को Display करने के लिए इसे.aspx Page पर स्थित <form> Element के Controls Collection में Add करना होता है। इसीलिए उपरोक्त Code के Just बाद में हमने निम्नानुसार Code लिखा है:

//Add to Controls Collection of Page.
By.Controls.Add(dynaButton);

इस Code में हमने उस <form> Element के Controls Collection में dynaButton नाम के Dynamically Created Button को Add किया है, जिस का id=“By”है क्योंकि इसी ID द्वारा हम किसी.aspx Page के उस Control को Server Side की Code-Behind File में Access कर सकते हैं, जिसके साथ हमें कोई Specific Action Perform करना होता है।

चूंकि हमें हमारे.aspx Page पर Code-Behind File द्वारा Dynamically Create किए जाने वाले Button Control को Add करना है और किसी भी Control को हमेंशा .aspx Page के <form> Element में अथवा <form> Element के किसी Child Control मेंही Add किया जा सकता है, <form> Element के बाहर नहीं।

इसलिए इस Code में हमने उस <form> Element में अपना Dynamically Created Button Control Add किया है, जिसका ID By है। परिणामस्वरूप जब हम इस Page को Run करते हैं, तो हमें उपरोक्तानुसार Resultant Webpage प्राप्त होता है, जिस पर Dynamically Created Button होता है।

हम इस Code को किसी भी Event Handler द्वारा Execute कर सकते हैं। लेकिन क्योंकि हमने इसे अपने Webpage केPage_Load Event Handler में Specify किया है और हमारा Page पहले ही Create व Load हो चुका है, इसलिए हम जो भी Control Dynamically Create करते हैं, वह हमारे Page के <form> Element के अन्तिम Control के रूप में ही Add होता है।

अपने Dynamically Create होने वाले Control की Position को ज्यादा बेहतर तरीके से Control करने के लिए हम हमारे.aspx Page पर PlaceHolder Controlको भी Use कर सकते हैं और अपने Dynamically Created Control को इस PlaceHolder के Controls Collection में भी Add कर सकते हैं। क्योंकि PlaceHolder Control, Resultant Webpage पर किसी भी HTML Element के रूप में Render नहीं होता, जबकि Visual Studio हमें PlaceHolder Control के माध्‍यम से अपने Page Design को Manage करने की सुविधा Provide करता है। जिसकी वजह से हम हमारे Control को अपने Resultant Webpage पर जहां चाहें वहां Place कर सकते हैं।

जब हम Dynamic Controls Use करते हैं, तब हमें हमेंशा इस बात का ध्‍यान रखना होता है कि हमारे द्वारा Create किए गए Dynamic Controls केवल अगले Postback तक ही Exist रहते हैं। जैसे ही User अगला Postback Perform करता है, हमारे द्वारा Created Dynamic Controls Destroy हो जाते हैं। यानी ASP.NET Dynamically Added Controls को अगले Postback पर फिर से Recreate नहीं करता।

इसलिए यदि हमें किसी Control को Multiple Request के दौरान Recreate करना हो, तो उस स्थिति में हमें हमारे Dynamically Create किए जाने वाले Controls से सम्बंधित Codes को Page.Load Event के अन्तर्गत ही लिखने चाहिए। ऐसा करने का एक Additional Benefit ये होता है कि हम हमारे Dynamic Control के साथ View State Data को भी Use कर सकते हैं।

हालांकि View State Data सामान्‍यत: Page.Load Event से पहले ही Restore हो चुका होता है, इसलिए यदि हम Page.Load Event के Handler में कोई Control, Dynamically Create करते हैं, तो ASP.NET किसी भी नई View State Information को Page.Load Event Handler के Execution के End होने पर Apply कर देता है और ये Process पूरी तरह से Automatic होता है।

यदि हमें हमारे Controls से बाद में फिर से Interact करना हो, तो हम उस Control के Unique ID का प्रयोग करते हुए उस Control को फिर से उपयोग में ले सकते हैं। इस ID का प्रयोग करते हुए हम Controls के Collection से किसी Particular Control को Identify कर सकते हैं अथवा यदि हम सभी Controls को Access करना चाहें, तो पिछले Section में Discuss किए अनुसार Recursive Method Create करके सभी Controls को Access व Manipulate कर सकते हैं।

The Page Header in ASP.NET
ASP.NET – Working with WebForms Designer

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

Core ASP.NET WebForms in Hindi | Page:647 | Format: PDF

BUY NOW GET DEMO REVIEWS