ذخیره مقدار داینامیک TextBox در دیتابیس توسط ASP.Net

شنبه 28 شهریور 1394

در این مقاله آموزش می دهیم چگونه با استفاده از C# در ASP.Net مقدار textbox را به صورت داینامیک در Database ذخیره کنیم.

ذخیره مقدار داینامیک TextBox در دیتابیس توسط ASP.Net

طراحی دیتابیس:

برای این کار، جدولی با ساختار زیر ایجاد می کنیم:


HTML:

کدهای HTML، شامل یک پنل ASP و دو دکمه می باشد، یک دکمه برای اضافه کردن textboxها و دیگری برای ذخیره کردن مقادیر textbox ها در دیتابیس است که به صورت داینامیک تولید می شوند.

<asp:Panel ID="pnlTextBoxes" runat="server">
    </asp:Panel>
    <hr />
    <asp:Button ID="btnAdd" runat="server" Text="افزودن" OnClick="AddTextBox" />
    <asp:Button ID="btnSave" runat="server" Text="ذخیره" OnClick="Save" />

ایجاد و اضافه کردن داینامیک textbox ها در رویداد Button Click:

زمانی که دکمه "افزودن" را کلیک کنیم، ابتدا تمام textboxهای موجود در پنل مشخص می شوند و سپس یکی به ایندکسی که برای ایجاد ID یکتا برای textboxها استفاده می شود، اضافه می شود.

ID یکتا به متد CreateTextbox ارسال می شود، این متد textbox داینامیک ایجاد می کند و آن را به پنل اضافه می کند.

توجه داشته باشید که پیشوند txt را به نام همه textbox ها بدهید به عنوان مثال txtDynamic تا همه textboxهای داینامیک در هر PostBack پیدا و دوباره ایجاد شوند.

کد #C:

protected void AddTextBox(object sender, EventArgs e)
{
    int index = pnlTextBoxes.Controls.OfType<TextBox>().ToList().Count + 1;
    this.CreateTextBox("txtDynamic" + index);
}
 
private void CreateTextBox(string id)
{
    TextBox txt = new TextBox();
    txt.ID = id;
    pnlTextBoxes.Controls.Add(txt);
 
    Literal lt = new Literal();
    lt.Text = "<br />";
    pnlTextBoxes.Controls.Add(lt);
}

کد VB.Net:


Protected Sub AddTextBox(sender As Object, e As EventArgs)
    Dim index As Integer = pnlTextBoxes.Controls.OfType(Of TextBox)().ToList().Count + 1
    Me.CreateTextBox("txtDynamic" & index)
End Sub
 
Private Sub CreateTextBox(id As String)
    Dim txt As New TextBox()
    txt.ID = id
    pnlTextBoxes.Controls.Add(txt)
 
    Dim lt As New Literal()
    lt.Text = "<br />"
    pnlTextBoxes.Controls.Add(lt)
End Sub

حفظ textboxهای داینامیک در PostBack:

برای حفظ textboxهای داینامیک در طول PostBackها، باید از رویداد مربوط به Page به نام Prelnit استفاده کرد و با استفاده از کالکشن Request.Form، تمام textboxهای داینامیک را دوباره ایجاد کرد.

کد #C:


protected void Page_PreInit(object sender, EventArgs e)
{
    List<string> keys = Request.Form.AllKeys.Where(key => key.Contains("txtDynamic")).ToList();
    int i = 1;
    foreach (string key in keys)
    {
        this.CreateTextBox("txtDynamic" + i);
        i++;
    }
}

کد VB.Net:


Protected Sub Page_PreInit(sender As Object, e As EventArgs) Handles Me.PreInit
    Dim keys As List(Of String) = Request.Form.AllKeys.Where(Function(key) key.Contains("txtDynamic")).ToList()
    Dim i As Integer = 1
    For Each key As String In keys
        Me.CreateTextBox("txtDynamic" & i)
        i += 1
    Next
End Sub

ذخیره مقادیر Textboxهای ایجاد شده در دیتابیس:

زمانی که دکمه "ذخیره" کلیک شود، یک حلقه foreach روی Textboxها اجرا می شود. درون حلقه، مقادیر textboxها واکشی شده و در SQL Server Database ذخیره می شود.

کد #C:


protected void Save(object sender, EventArgs e)
{
    foreach (TextBox textBox in pnlTextBoxes.Controls.OfType<TextBox>())
    {
        string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand("INSERT INTO Names(Name) VALUES(@Name)"))
            {
                cmd.Connection = con;
                cmd.Parameters.AddWithValue("@Name", textBox.Text);
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }
    }
}

کد VB.Net:


Protected Sub Save(sender As Object, e As EventArgs)
    For Each textBox As TextBox In pnlTextBoxes.Controls.OfType(Of TextBox)()
        Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
        Using con As New SqlConnection(constr)
            Using cmd As New SqlCommand("INSERT INTO Names(Name) VALUES(@Name)")
                cmd.Connection = con
                cmd.Parameters.AddWithValue("@Name", textBox.Text)
                con.Open()
                cmd.ExecuteNonQuery()
                con.Close()
            End Using
        End Using
    Next
End Sub

مقادیر Textboxها در دیتابیس ذخیره می شود.

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید