gridview update总是首先选择行吗?

时间:2013-03-14 15:37:21

标签: c# asp.net gridview

我有一个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]"

1 个答案:

答案 0 :(得分:0)

单击行上的“更新”按钮时,它将更改所选索引,因此它将运行selectedIndexChanged事件。

每次单击网格时,我能想到的最好的方法是不要触发此SQL,而是将代码移动到不会在每次单击时触发的其他方法。

值得注意的是,您使用的是内联SQL - 这是一个很大的安全漏洞。虽然对SELECT语句来说并不是那么糟糕,但这是一个不好的习惯。使用一些参数化的存储过程或数据访问层来获取数据,并记住验证您的输入。