【问题标题】:gridview update always does select rows first?gridview 更新总是先选择行?
【发布时间】:2013-03-14 15:37:20
【问题描述】:

我有一个通过 sqldatasource 从本地 sql db 填充的 gridview。

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]"

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

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

    我能想到的每次单击网格时不触发此 SQL 的最佳方法是将代码移动到不会在每次单击时触发的不同方法中。

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

    【讨论】:

    • 似乎每次我点击更新链接时,它都会回发并运行sqldatasource的原始select命令,即使已经更新了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多