2013-03-14 37 views
1

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

回答

0

當您單擊該行上的更新按鈕時,它將更改選定的索引,因此它將運行您的selectedIndexChanged事件。

每次單擊網格時,我認爲最好的方式是不要觸發此SQL,而是將您的代碼移動到不會每次點擊都觸發的不同方法。

還值得注意的是,您正在使用內聯SQL - 這是一個巨大的安全漏洞。雖然對於SELECT語句來說並不是那麼糟糕,但這是一個不好的習慣。使用一些參數化存儲過程或數據訪問層來獲取數據,並記住驗證輸入。

+0

看來每次點擊更新鏈接時,它都會執行回發並運行sqldatasource的原始selectcommand,即使已經更新。 – 2013-03-14 16:40:49