仅更新asp.net gridview上的选定行

时间:2014-04-02 01:20:12

标签: asp.net

这是一个场景,我已经为时间和时间创建了一个程序

一个人早上7点进入,下午2点离开

PERSON A |上午7:00 |下午2点

人a在下午3点再次进入

PERSON A |下午3:00 |

当我点击超时按钮时,它会更新超时列,当它出现时,A人的超时都会更新。

这是我的代码

 protected void EMPLOYEERECORD_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
        Label lblEditEmpName = (Label)EMPLOYEERECORD.Rows[e.RowIndex].FindControl("lblEditEmpName");
        Label lblEditTimeOut = (Label)EMPLOYEERECORD.Rows[e.RowIndex].FindControl("lblEditTimeOut");
        TextBox txtEditRemarks = (TextBox)EMPLOYEERECORD.Rows[e.RowIndex].FindControl("txtEditRemarks");   

        DatabaseModule.SQcon.Open();
        string cmdstr = "update dbo.RecordEmployee set TIME_OUT=@timeout, REMARKS=@editRemarks where EMPLOYEE_NAME =@empname";
        SqlCommand cmd = new SqlCommand(cmdstr, DatabaseModule.SQcon);

        cmd.Parameters.AddWithValue("@empname", lblEditEmpName.Text);
        cmd.Parameters.AddWithValue("@editRemarks", txtEditRemarks.Text);
        cmd.Parameters.AddWithValue("@timeout", DateTime.Now.ToString("T"));

        cmd.ExecuteNonQuery();
        DatabaseModule.SQcon.Close();
        EMPLOYEERECORD.EditIndex = -1;

        BindData();



    }

如何仅更新所选行?

1 个答案:

答案 0 :(得分:1)

您需要拥有每个行的密钥。

你的例子:

PERSON A| 7:00 AM| 2PM
PERSON A| 3:00 PM|

您的更新语句将更新具有相同员工姓名的所有行。因此, PERSON A 的更新将更新这两行。

如果您还没有,则需要为每一行(例如一个int)创建一个唯一标识符,以便您只更新特定行。

例如,表结构可以是:

1 | PERSON A| 7:00 AM| 2PM
2 | PERSON A| 3:00 PM|

更新语句将更改为:

update <whatever> where RowId = @rowId