我有一个gridview填充形式的本地sql db通过sqldatasource。
sqldatasource的select命令是: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中的某一行上单击更新时,它是否始终运行默认的选择命令:SelectCommand="SELECT * FROM [CERecord] ORDER BY [Priority]"
?
答案 0 :(得分:0)
单击行上的“更新”按钮时,它将更改所选索引,因此它将运行selectedIndexChanged事件。
每次单击网格时,我能想到的最好的方法是不要触发此SQL,而是将代码移动到不会在每次单击时触发的其他方法。
值得注意的是,您使用的是内联SQL - 这是一个很大的安全漏洞。虽然对SELECT语句来说并不是那么糟糕,但这是一个不好的习惯。使用一些参数化的存储过程或数据访问层来获取数据,并记住验证您的输入。