解決 DropDownList 在控制項樣版中無法記錄狀態的問題

碰到一個怪怪的問題:
  • 當 DropDownList 放在 GridView 的 HeaderTemplate 中時,PostBack 後就是無法記得上次選擇的項目
  • 同樣的 DropDownList 移到外面後就一切正常了
解決辦法:
  • 在 DropDownList.SelectedIndexChanged 事件中用
    GridView.Attributes["MyIndex"] = DropDownList.SelectedIndex.ToString();
    的方式把選項記錄下來
  • 在 GridView.RowDataBound 事件中用
    DropDownList.SelectedIndex = Convert.ToInt32(GridView.Attributes["MyIndex"]);
    的方式還原
緣由:在 HeaderTemplate 製作條件過濾的下拉式選單 (VB.NET) (文章編號:N020600501)


GridView 過濾資料除了直接在 SqlDataSource 的 SelectQuery 加上 WHERE 子句外 (包含參數),也可以利用 SqlDataSource.FilterExpression 屬性來實現,同時該屬性也有對應的參數集合 SqlDataSource.FilterParameters

使用方法也非常簡單,例如

SqlDataSource.FilterExpression = "[欄位名稱]=常數值";

適合直接在程式中設定,或者

SqlDataSource.FilterExpression = "[欄位名稱]={0}";

其中 [欄位名稱] 必須出現在 SelectQuery 的 SELECT 子句中,否則會產生錯誤
而 SqlDataSource.FilterParameters 可以利用程式設定對應欄位參數的 DefaultValue,也可以直接對應到其它控制項

SqlDataSource.FilterParameters["[欄位名稱]"].DefaultValue = ...

不過如果要多一個選擇 "全部" 的選項的話,這個方式似乎也沒有比較方便啊

留言

這個網誌中的熱門文章

Linux 批次檔的寫法

【分享】如何顯示 Debug Message

[分享] Visual Studio 遠端偵錯