توضیحات و دانلود

ایجادکنترل دینامیک در ASP.Net
0 0
ایجادکنترل دینامیک در ASP.Net

با سلام در این مقاله  ایجاد کنترل TextBox پویا در asp.net را  توضیح خواهیم داد . همچنین  حفظ ارزش پیغام های پس زمینه و چگونگی بازبینی کنترل ها بر روی هر پسوند را توضیح می دهیم . علاوه بر این اتصال رویداد پویا به کنترل TextBox در asp.net را مورد بحث قرار می دهیم

برای شروع رویداد PreInit را به صفحه اضافه می کنیم و کد زیر را به آن اضافه می کنیم .

C #

Panel pnlTextBox;

protected void Page_PreInit(object sender, EventArgs e)

{

    //Create a Dynamic Panel

    pnlTextBox = new Panel();

    pnlTextBox.ID = "pnlTextBox";

    pnlTextBox.BorderWidth = 1;

    pnlTextBox.Width = 300;

    this.form1.Controls.Add(pnlTextBox);

 

    //Create a LinkDynamic Button to Add TextBoxes

    LinkButton btnAddtxt = new LinkButton();

    btnAddtxt.ID = "btnAddTxt";

    btnAddtxt.Text = "Add TextBox";

    btnAddtxt.Click += new System.EventHandler(btnAdd_Click);

    this.form1.Controls.Add(btnAddtxt);

   

    //Recreate Controls

    RecreateControls("txtDynamic", "TextBox");

}

VB.Net

Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreInit

  'Create a Dynamic Panel

  pnlTextBox = New Panel()

  pnlTextBox.ID = "pnlTextBox"

  pnlTextBox.BorderWidth = 1

  pnlTextBox.Width = 300

  Me.form1.Controls.Add(pnlTextBox)

 

  'Create a LinkDynamic Button to Add TextBoxes

  Dim btnAddtxt As New LinkButton()

  btnAddtxt.ID = "btnAddtxt"

  btnAddtxt.Text = "Add TextBox"

  AddHandler btnAddtxt.Click, AddressOf btnAdd_Click

  Me.form1.Controls.Add(btnAddtxt)

 

  'Recreate Controls

  RecreateControls("txtDynamic", "TextBox")

End Sub

همانطور که در بالا مشخص می کنید، کنترل های زیر را ایجاد کرده اید

1 ایجاد پنل  پویا pnlTextBox واضافه کردن  آن به کنترل فرم در صفحه

2. ایجاد LinkButton پویا btnAddTxt و پیوست به رویداد btnAdd_Click به آن واضافه کردن به کنترل فرم

3. ایجاد یک تابع به نام RecreateControls

در رویداد Click از LinkButton پویا، رویداد زیر را اضافه می کنیم

C #

protected void btnAdd_Click(object sender, EventArgs e)

{

    int cnt = FindOccurence("txtDynamic");

    CreateTextBox("txtDynamic-" + Convert.ToString(cnt + 1));

}

 VB.Net

Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As EventArgs)

    Dim cnt As Integer = FindOccurence("txtDynamic")

    CreateTextBox("txtDynamic-" & Convert.ToString(cnt + 1))

End Sub

 دو عمل زیر را می خواهیم

1. FindOccurence

2. CreateTextBox

تابع FindOccurence به عنوان نام , وقوع TextBox پویا در مجموعه Request.Form است. ایده اصلی این است که  شناسه داده شده یک الگوی معمول است که تمام شناسه ها از نوع txtDynamic هستند مانند txtDynamic-1، txtDynamic-2 و غیره.

C #

private int FindOccurence(string substr)

{

    string reqstr = Request.Form.ToString();

    return ((reqstr.Length - reqstr.Replace(substr, "").Length)

                      / substr.Length);

}

VB.Net

Private Function FindOccurence(ByVal substr As String) As Integer

   Dim reqstr As String = Request.Form.ToString()

   Return ((reqstr.Length - reqstr.Replace(substr, "").Length) & _

                                           / substr.Length)

End Function

حالا CreateTextBox به عنوان نام برای ایجاد TextBox پویا استفاده می شود. این تابع ID را به عنوان پارامتر می پزیرد

C #

private void CreateTextBox(string ID)

{

    TextBox txt = new TextBox();

    txt.ID = ID;

    txt.AutoPostBack = true;

    txt.TextChanged += new EventHandler(OnTextChanged);

    pnlTextBox.Controls.Add(txt);

 

    Literal lt = new Literal();

    lt.Text = "<br />";

    pnlTextBox.Controls.Add(lt);

}

VB.Net

Private Sub CreateTextBox(ByVal ID As String)

    Dim txt As New TextBox()

    txt.ID = ID

    txt.AutoPostBack = True

    AddHandler txt.TextChanged, AddressOf OnTextChanged

    pnlTextBox.Controls.Add(txt)

 

    Dim lt As New Literal()

    lt.Text = "<br />"

    pnlTextBox.Controls.Add(lt)

End Sub

 یک TextBox جدید ایجاد کرده و موارد را به آن اضافه می کنیم. سپس پیوستن TextChanged Event Handler و تنظیم ویژگی AutoPostBack به درستی انجام می شود. در نهایت آن را به پنل pnlTextBox اضافه می کنیم .

رویداد SelectedIndexChanged Handler در زیر داده شده است.

C #

protected void OnTextChanged(object sender, EventArgs e)

{

    TextBox txt = (TextBox)sender;

    string ID = txt.ID;

    ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert",

                 "<script type = 'text/javascript'>alert('" + ID  +

                  " fired OnTextChanged event');</script>");

   

    //Place the functionality here

}

VB.Net

Protected Sub OnTextChanged(ByVal sender As Object, ByVal e As EventArgs)

    Dim txt As TextBox = DirectCast(sender, TextBox)

    Dim ID As String = txt.ID

 

    'Place the functionality here

    ClientScript.RegisterClientScriptBlock(Me.GetType(), _

    "Alert", "<script type = 'text/javascript'>alert('" & ID _

    & " fired OnTextChanged event');</script>")

End Sub

در رویداد فوق، شناسه Callback TextBox را براساس نوع Casting parametr Sender پیدا می کنیم و سپس آن را در یک  هشدار جاوا اسکریپت نمایش میدهیم 

همانطور که در شکل زیر نشان داده شده

در حال حاضر مهم ترین تابع RecreateControls است که کار آن بازسازی تمام TextBox را بر روی هر پسوند است

C #

private void RecreateControls(string ctrlPrefix, string ctrlType)

{

    string[] ctrls = Request.Form.ToString().Split('&');

    int cnt = FindOccurence(ctrlPrefix);

    if (cnt > 0)

    {

        for (int k = 1; k <= cnt; k++)

        {

            for (int i = 0; i < ctrls.Length; i++)

            {

                if (ctrls[i].Contains(ctrlPrefix + "-" + k.ToString())

                    && !ctrls[i].Contains("EVENTTARGET"))

                {

                    string ctrlID = ctrls[i].Split('=')[0];

 

                    if (ctrlType == "TextBox")

                    {

                        CreateTextBox(ctrlID);

                    }

                    break;

                }

            }

        }

    }

}

VB.Net

Private Sub RecreateControls(ByVal ctrlPrefix As String, ByVal ctrlType As String)

  Dim ctrls As String() = Request.Form.ToString().Split("&"c)

  Dim cnt As Integer = FindOccurence(ctrlPrefix)

  If cnt > 0 Then

      For k As Integer = 1 To cnt

         For i As Integer = 0 To ctrls.Length - 1

             If ctrls(i).Contains((ctrlPrefix & "-") + k.ToString()) _

                  AndAlso Not ctrls(i).Contains("EVENTTARGET") Then

                 Dim ctrlID As String = ctrls(i).Split("="c)(0)

 

                 If ctrlType = "TextBox" Then

                      CreateTextBox(ctrlID)

                 End If

                 Exit For

             End If

         Next

     Next

  End If

End Sub

همانطور که در بالا ذکر شد، ابتدا یک رشته خاص در اینجا txtDynamic در مجموعه Request.Form پیدا میکنیم و سپس از طریق هر آیتم حلقه میکنیم و همچنان TextBox را با استفاده از تابع CreateTextBox  نگهداری میکنیم. 


دانلود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

لینک های دانلود

  • دانلود ایجادکنترل دینامیک در ASP.Net - لینک دانلود بعد از خرید نمایش داده خواهد شد

ارسال نظر
ارسال پیام به :