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语句来说并不是那么糟糕,但这是一个不好的习惯。使用一些参数化存储过程或数据访问层来获取数据,并记住验证输入。

+0

看来每次点击更新链接时,它都会执行回发并运行sqldatasource的原始selectcommand,即使已经更新。 – 2013-03-14 16:40:49