gridview更新总是首先选择行?
问题描述:
我有一个gridview填充形式通过sqldatasource本地sql分贝。gridview更新总是首先选择行?
在SqlDataSource的选择命令是:SelectCommand="SELECT * FROM [CERecord] ORDER BY [Priority]"
在我后面的代码我有要么显示所有记录,活动记录,完成记录的单选按钮列表:
protected void rblShowRecords_SelectedIndexChanged(object sender, EventArgs e)
{
switch (rblShowRecords.SelectedValue)
{
case "Show Active/Completed":
CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] ORDER BY [Priority]";
break;
case "Show Active":
CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] WHERE [Completed]='false' ORDER BY [Priority]";
break;
case "Show Completed":
CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] WHERE [Completed]='true' ORDER BY [Priority]";
break;
default:
break;
}
CEDatabaseSource.DataBind();
gvRecordList.DataBind();
}
我有一个奇怪的问题是,如果我尝试更新某一行时,处于活动状态或仅完成状态时,它似乎只是开始显示所有行,即使我在上面的方法中设置了新的命令。
当你点击gridview中一行上的更新时,它是否总是运行默认的select命令:SelectCommand="SELECT * FROM [CERecord] ORDER BY [Priority]"
?
答
当您单击该行上的更新按钮时,它将更改选定的索引,因此它将运行您的selectedIndexChanged事件。
每次单击网格时,我认为最好的方式是不要触发此SQL,而是将您的代码移动到不会每次点击都触发的不同方法。
还值得注意的是,您正在使用内联SQL - 这是一个巨大的安全漏洞。虽然对于SELECT语句来说并不是那么糟糕,但这是一个不好的习惯。使用一些参数化存储过程或数据访问层来获取数据,并记住验证输入。
看来每次点击更新链接时,它都会执行回发并运行sqldatasource的原始selectcommand,即使已经更新。 – 2013-03-14 16:40:49