如何从具有2个文本框的Repeater Control插入到多个列中

时间:2013-06-19 12:16:02

标签: c# asp.net sql-server repeater

我正在做一个基于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()吗?

0 个答案:

没有答案