Web Form 中顯示清單控制項(ListContorl)選單中任一數值

清單控制項常見的問題

『xx擁有的SelectedValue無效,因為它不在項目清單中。』

這個錯誤訊息很常見,可能原因有:

  1. 看起來一樣,但「清單控制項」或「DB」的值藏有空白字元。
  2. 「清單控制項」與「DB」的值對不起來,譬如「DB」有xxx資料但是「清單控制項」沒有xxx資料。

此外,還有DataBind前就去SelectedValue數值…等原因。
會寫這篇文章,主要是剛好看到公司內部系統,其程式有下面這段寫法:

1
2
//預設姓名選單的值為資料建檔人員
ddlName.SelectedValue = value.CrtateUserID;

看起來很正確,程式上線7年多也沒聽到使用者說有問題。

正常這樣使用是沒問題,

  • ddlName下拉式選單:動態產生公司內有權限使用系統的人員名字
  • value.CrtateUserID:資料建檔人員

但可能遇到建檔人員離職,權限異動後導致下拉式選單沒有該建檔人員姓名,然而DB中舊資料還保留該離職人員當初所建立之資料,導致選單與DB資料不合。


解決方法

解決方法很多,因為我發現程式中多處有此問題,
所以寫一個共用元件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/// <summary>
/// 設定ListConrtol數值
/// </summary>
/// <param name="parControl">ListConrol物件</param>
/// <param name="parValue">數值</param>
public static void SetListContorlValue(ListControl parControl, string parValue)
{

parControl.SelectedIndex = -1;

for (int i = 0; i < parControl.Items.Count; i++)
{
if (parControl.Items[i].Value.ToUpper().Trim() == parValue.ToUpper().Trim())
{
parControl.Items[i].Selected = true;
break;
}
}
}

以上適用所有的清單控制項,有哪些控制項適用,就請參考MSDN(ListControl類別)了。

這可能不是最好的寫法或解決方法,但是是簡單的解決方法。