我正在做一个基于Web的HRM应用程序。从Repeater控件将数据插入SQL表时,我遇到了问题。任何人都可以看到我的代码并给我一个想法/帮助我犯了错误。
这是带有2个TextBox的Repeater控件,我将这两个文本框与表中的一些数据绑定
<table style="width:250px">
<tr>
<td style="width:35%;vertical-align:top">Employee ID</td>
<td>
<asp:TextBox ID="txtEmpID" runat="server"></asp:TextBox>
</td>
<td style="width:35%;vertical-align:top">CTC</td>
<td>
<asp:TextBox ID="txtCTC" runat="server"></asp:TextBox>
</td>
</tr>
</table>
和
<asp:Repeater ID="rptrEarns" runat="server" DataSourceID="SqlDataSource1" >
<ItemTemplate>
<asp:TextBox runat="server" ID="txtper"Text='<%#Eval("Percentage") %>'></asp:TextBox>
<asp:TextBox ID="txtValue" runat="server"Text="0"></asp:TextBox>
</ItemTemplate>
</asp:Repeater>`
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:db_connection %>"
SelectCommand="SELECT Name, [Percentage] FROM [tblSalaryHeads] WHERE [Type] ='Earnings' and Status='1' EXCEPT SELECT Name, [Percentage] FROM [tblSalaryHeads] WHERE Name ='CTC' ">
</asp:SqlDataSource>
以下是从Repeater插入的按钮事件处理程序:
protected void btnINSERT_Click(object sender, EventArgs e)
{
try
{
foreach (RepeaterItem item in rptrEarns.Items)
{
TextBox txtValue = (TextBox)item.FindControl("txtValue");
InsertData(txtValue.Text);
}
}
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
}
}
这是在btnINSERT_Click事件中调用的Insert方法:
public void InsertData(string Value)
{
SqlConnection con = new SqlConnection(dbconn);
string sql = "IF EXISTS (SELECT EmpID from tblEmps WHERE EmpID=@EmpID) UPDATE tblEmps SET [CTC]=@CTC,[Basic]=@Basic,[HRA]=@HRA,[DA]=@DA,[Convy]=@Convy,[OA]=@OA WHERE EmpID=@EmpID ELSE Insert into tblEmps([EmpID],[CTC],[Basic],[HRA],[DA],[Convy],[OA]) values(@EmpID,@CTC,@Basic,@HRA,@DA,@Convy,@OA)";
try
{
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("EmpID", txtEmpID.Text);
cmd.Parameters.AddWithValue("CTC", txtCTC.Text);
cmd.Parameters.AddWithValue("Basic", Value);
cmd.Parameters.AddWithValue("HRA", Value);
cmd.Parameters.AddWithValue("Convy",Value);
cmd.Parameters.AddWithValue("DA", Value);
cmd.Parameters.AddWithValue("OA", Value);
cmd.ExecuteNonQuery();
con.Close();
lblresult.Text = "Records Saved Successfully..";
lblresult.ForeColor = System.Drawing.Color.Green;
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
我可以插入数据,但每列只插入一个值多次。
例如,在将数据绑定到Repeater之后,它将有5行具有不同的值,在我的情况下,第5行值将插入除Repeater外部的文本框值之外的所有列中。
我可以为RepeaterItems的每次迭代获取TextBox的值,然后将其分配给一个不同的变量,并将变量文本传递给不同的列到InsertData()
方法吗?
或者我可以使用List / Array从迭代的TextBox加载并以某种方式将它们绑定到InsertData()
吗?