AffectedRows属性是获取受更新操作影响的行数
这个方法经常用在防止多用户操作后的提示信息上。通常我们我们在使用SqlDataSource控件来绑定GridView或者是DetailView等控件。如果有更新,删除等数据库操作的时候,我们都会设置详细设置中的2个选项,一个是添加Insert,Updata等操作,还有个就是为了防止多用户同时操作的选项。这2个都打上钩后,我们在做更新操作时候如何知道是否有人已经发生了冲突,如何去设置提示"更新数据发生冲突,更新失败"这样的信息呢?
我们就可以在SqlDataSource控件的Updated事件中去写下面的代码
protected void sds_Updated(object sender, SqlDataSourceStatusEventArgs e)
{
if (e.AffectedRows == 1)
{
Label1.Text = "更新数据发生冲突,更新失败";
}
}
AffectedRows 属性是获取受更新操作影响的行数,如果为0,则表示没有更新。因为通常只更新一条记录,所以该属性通常包含一个为 0 或 1 的值。有时,在不引发异常的插入操作期间可能会发生错误。AffectedRows 属性通常用于验证是否插入了记录。下面的例子所用的事件是GridView控件的Updated事件,和SqlDataSource控件的Updated事件是一样的,更新操作后都会进入这2个事件,没有什么区别关系。以下是一个例子:(此示例鉴于MSDN)
protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
if (e.Exception == null)
{
if (e.AffectedRows == 1)
{
//lblMessage是Lable控件用于显示具体信息
lblMessage.Text = "updated successfully.";
//显示更新后的数据和更新前的数据
DisplayValues((OrderedDictionary)e.NewValues, (OrderedDictionary)e.OldValues);
}
else
{
lblMessage.Text = "An error occurred during the update operation.";
//trueGridView 控件继续处于编辑模式
e.KeepInEditMode = true;
}
}
else
{
lblMessage.Text = e.Exception.Message;
//true该异常被视作已处理,不会被 GridView 控件重新引发。如果此属性被设置为 false,异常将被重新引发。
e.ExceptionHandled = true;
//trueGridView 控件继续处于编辑模式
e.KeepInEditMode = true;
}
}
//显示更新后的数据和更新前的数据
void DisplayValues(OrderedDictionary newValues, OrderedDictionary oldValues)
{
lblMessage.Text += "<br/></br>";
for (int i = 0; i < oldValues.Count; i++)
{
lblMessage.Text += "Old Value=" + oldValues[i].ToString() +
", New Value=" + newValues[i].ToString() + "<br/>";
}
lblMessage.Text += "</br>";
}
GridViewUpdatedEventArgs.KeepInEditMode 属性获取或设置一个值,该值指示在更新操作之后 GridView 控件是否应该继续处于编辑模式。默认情况下,GridView 控件在执行更新操作后将返回到只读模式。使用 KeepInEditMode 属性,可以指定 GridView 控件是否应继续处于编辑模式。若要使 GridView 控件继续处于编辑模式,请将此属性设置为 true。