将 Repeater 文本框中的数据插入数据库
Insert data from a Repeater's textbox into a database
我正在使用具有标签和文本框的 Repeater。它根据 table 中的列(名字、姓氏、地址等)生成正确的标签。用户应在相应的文本框中输入他们的信息。
在此之后,我需要一种方法将他们的数据从文本框中插入到我的数据库中。但是我不确定的是如何将每个项目插入到数据库的正确列中。我正在使用存储过程,所以它会是这样的:
sqlCmd.Parameters.Add("@FirstName", SqlDbType.Int).Value = firstName.Text;
当我唯一的文本框是重复的 txtData 时,我当然无法识别 firstName.Text。
foreach (RepeaterItem rpItem in RepeaterForm.Items)
{
Label lblData = rpItem.FindControl("lblData") as Label;
TextBox txtData = rpItem.FindControl("txtData") as TextBox;
if (txtData != null)
{
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = "spInsFormFields";
sqlCmd.Parameters.Clear();
//Code here
sqlCmd.ExecuteNonQuery();
}
}
一个示例转发器表单可能如下所示:
First Name: John
Last Name: Smith
Address: 123 Cherry Lane
我的数据库示例如下:
Registrant table
FirstName, LastName, Address columns
提交按钮应根据 EventId
和 FormId
(我之前在代码中收集的)
输入一行
编辑:
这是我的 Repeater 代码(根据要求):
<asp:Repeater ID="RepeaterForm" runat="server" OnItemCommand="RepeaterForm_ItemCommand">
<ItemTemplate>
<table>
<tr>
<td><asp:Label ID="lblData" runat="server" Text='<%# Eval("MyColumn") %>'></asp:Label></td>
<td><asp:TextBox ID="txtData" runat="server"></asp:TextBox>
<br></br></td>
</tr>
</table>
</ItemTemplate>
<FooterTemplate><asp:Button ID="BtnSubmit" runat="server" Text="Submit" OnClick="BtnSubmit_Click" /></FooterTemplate>
</asp:Repeater>
假设txtFirstname
,txtLastname
,txtAddress
是repeater中各个控件的名称,那么您可以通过以下代码访问它们:
foreach (RepeaterItem rpItem in RepeaterForm.Items)
{
TextBox tFirstname = rpItem.FindControl("txtFirstname") as TextBox;
TextBox tLastname = rpItem.FindControl("txtLastname") as TextBox;
TextBox tAddress = rpItem.FindControl("txtAddress") as TextBox;
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = "spInsFormFields";
sqlCmd.Parameters.Clear();
if (tFirstname != null)
sqlCmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = tFirstname.Text;
if (tLastname != null)
sqlCmd.Parameters.Add("@Lastname", SqlDbType.VarChar).Value = tLastname.Text;
if (tAddress != null)
sqlCmd.Parameters.Add("@Address", SqlDbType.VarChar).Value = tAddress.Text;
sqlCmd.ExecuteNonQuery();
}
像这样准备中继器:
<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<input type="text" name='<%#Eval("ColumnName") %>' />
</ItemTemplate>
</asp:Repeater>
<asp:Button ID="btnSave" runat="server" Text="Button" OnClick="btnSave_Click" />
</div>
</form>
并且通过使用此 C# 代码,您可以动态获取所有值:
public partial class WebForm1 : System.Web.UI.Page
{
List<Column> Columns = new List<Column>();
protected void Page_Init(object sender, EventArgs e)
{
Columns.Add(new Column { ColumnName = "ID" });
Columns.Add(new Column { ColumnName = "Name" });
Columns.Add(new Column { ColumnName = "Surname" });
}
protected void Page_Load(object sender, EventArgs e)
{
Repeater1.DataSource = Columns;
Repeater1.DataBind();
}
protected void btnSave_Click(object sender, EventArgs e)
{
Dictionary<string, string> Values = new Dictionary<string, string>();
foreach (var item in Columns)
{
Values.Add(item.ColumnName, Request.Form[item.ColumnName]);
}
}
}
class Column
{
public string ColumnName { get; set; }
}
我正在使用具有标签和文本框的 Repeater。它根据 table 中的列(名字、姓氏、地址等)生成正确的标签。用户应在相应的文本框中输入他们的信息。
在此之后,我需要一种方法将他们的数据从文本框中插入到我的数据库中。但是我不确定的是如何将每个项目插入到数据库的正确列中。我正在使用存储过程,所以它会是这样的:
sqlCmd.Parameters.Add("@FirstName", SqlDbType.Int).Value = firstName.Text;
当我唯一的文本框是重复的 txtData 时,我当然无法识别 firstName.Text。
foreach (RepeaterItem rpItem in RepeaterForm.Items)
{
Label lblData = rpItem.FindControl("lblData") as Label;
TextBox txtData = rpItem.FindControl("txtData") as TextBox;
if (txtData != null)
{
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = "spInsFormFields";
sqlCmd.Parameters.Clear();
//Code here
sqlCmd.ExecuteNonQuery();
}
}
一个示例转发器表单可能如下所示:
First Name: John
Last Name: Smith
Address: 123 Cherry Lane
我的数据库示例如下:
Registrant table
FirstName, LastName, Address columns
提交按钮应根据 EventId
和 FormId
(我之前在代码中收集的)
编辑:
这是我的 Repeater 代码(根据要求):
<asp:Repeater ID="RepeaterForm" runat="server" OnItemCommand="RepeaterForm_ItemCommand">
<ItemTemplate>
<table>
<tr>
<td><asp:Label ID="lblData" runat="server" Text='<%# Eval("MyColumn") %>'></asp:Label></td>
<td><asp:TextBox ID="txtData" runat="server"></asp:TextBox>
<br></br></td>
</tr>
</table>
</ItemTemplate>
<FooterTemplate><asp:Button ID="BtnSubmit" runat="server" Text="Submit" OnClick="BtnSubmit_Click" /></FooterTemplate>
</asp:Repeater>
假设txtFirstname
,txtLastname
,txtAddress
是repeater中各个控件的名称,那么您可以通过以下代码访问它们:
foreach (RepeaterItem rpItem in RepeaterForm.Items)
{
TextBox tFirstname = rpItem.FindControl("txtFirstname") as TextBox;
TextBox tLastname = rpItem.FindControl("txtLastname") as TextBox;
TextBox tAddress = rpItem.FindControl("txtAddress") as TextBox;
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = "spInsFormFields";
sqlCmd.Parameters.Clear();
if (tFirstname != null)
sqlCmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = tFirstname.Text;
if (tLastname != null)
sqlCmd.Parameters.Add("@Lastname", SqlDbType.VarChar).Value = tLastname.Text;
if (tAddress != null)
sqlCmd.Parameters.Add("@Address", SqlDbType.VarChar).Value = tAddress.Text;
sqlCmd.ExecuteNonQuery();
}
像这样准备中继器:
<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<input type="text" name='<%#Eval("ColumnName") %>' />
</ItemTemplate>
</asp:Repeater>
<asp:Button ID="btnSave" runat="server" Text="Button" OnClick="btnSave_Click" />
</div>
</form>
并且通过使用此 C# 代码,您可以动态获取所有值:
public partial class WebForm1 : System.Web.UI.Page
{
List<Column> Columns = new List<Column>();
protected void Page_Init(object sender, EventArgs e)
{
Columns.Add(new Column { ColumnName = "ID" });
Columns.Add(new Column { ColumnName = "Name" });
Columns.Add(new Column { ColumnName = "Surname" });
}
protected void Page_Load(object sender, EventArgs e)
{
Repeater1.DataSource = Columns;
Repeater1.DataBind();
}
protected void btnSave_Click(object sender, EventArgs e)
{
Dictionary<string, string> Values = new Dictionary<string, string>();
foreach (var item in Columns)
{
Values.Add(item.ColumnName, Request.Form[item.ColumnName]);
}
}
}
class Column
{
public string ColumnName { get; set; }
}