ذخیره مقدار داینامیک TextBox در دیتابیس توسط ASP.Net
شنبه 28 شهریور 1394در این مقاله آموزش می دهیم چگونه با استفاده از C# در ASP.Net مقدار textbox را به صورت داینامیک در Database ذخیره کنیم.
طراحی دیتابیس:
برای این کار، جدولی با ساختار زیر ایجاد می کنیم:
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ها در دیتابیس ذخیره می شود.
- ASP.net
- 4k بازدید
- 6 تشکر