[C#] 下拉式選單(DropdownList)如果記錄的是ListItem Text,該如何呈現使用者上次選的結果。

  • 30339
  • 0
  • C#
  • 2015-05-14

摘要:C#.NET 下拉式選單(DropdownList)如果記錄的是ListItem Text,該如何呈現使用者上次選的結果。

有時候我們會提供頁面給使用者做資料修改,為了怕使用者填寫錯誤,會用下拉式選單(DropdownList),讓使用者填寫,但是也要提示使用者上一次記錄的資料內容。因此將資料庫中的資料與下拉式選單作對應是很常會遇到的事情。

理論上,資料庫中記錄的資料內容儲存值應該會是越少越好。也就是說,如果以下拉式選單如下面所示,要記錄在資料庫中的應該是ListItem  Value的值。對資料儲存來說比較有利,也可以降低資料庫容量成長。


選單1號:<asp:dropdownlist id=DropDownList3 runat="server">
        <asp:listitem value="0">-----請選擇-----</asp:listitem>
        <asp:listitem value="1" text="8小時"></asp:listitem>
        <asp:listitem value="2" text="8~10小時"></asp:listitem>
        <asp:listitem value="3" text="10小時以上"></asp:listitem>
    </asp:dropdownlist>

但是有時候資料庫中記錄的,卻是ListItem  Text,這樣的文字型態的資料。如果要將這文字型態的資料對應回去網頁,讓使用者知道上次他點選的項目。該怎麼做??


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//加入參考
using System.Data;


namespace DropDownList
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //新增一個DataTable,假裝已從DB中拿出資料
            DataTable dt = new DataTable();
            DataColumn column;
            DataRow row;
           
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Name";
            dt.Columns.Add(column);
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "ListValue";
            dt.Columns.Add(column);
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "ListText";
            dt.Columns.Add(column);
            //新增資料到dt
            row = dt.NewRow();
            row["Name"] = "史塔克";
            row["ListValue"] = "1";
            row["ListText"] = "8小時";
            dt.Rows.Add(row);

            row = dt.NewRow();
            row["Name"] = "小辣椒";
            row["ListValue"] = "3";
            row["ListText"] = "10小時以上";
            dt.Rows.Add(row);

            //在做問卷時,常常會要讓人家知道上次他填了什麼。
            //一般都會用SelectValue來取得DropDownList的對應
            DropDownList3.SelectedValue = dt.Rows[0]["ListValue"].ToString();
            //萬一資料庫記錄的不是Value,而是Text,這下該如何對應?
            //先取出資料表中的資料
            string str = dt.Rows[1]["ListText"].ToString();
            //利用FindByText().Value找出集合中,具有相同名稱所對應的關聯值(也就是ListItem Value)
            DropDownList4.SelectedValue = DropDownList4.Items.FindByText(str).Value.ToString();

        }
}

結果如下:

自我記錄一下,其實解法有很多,可以變更資料庫內容,可以將下拉式選單改成Value與Text相同,但是如果這些都不能變動。這也是一種方式^^。

水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。