有時候我們會提供頁面給使用者做資料修改,為了怕使用者填寫錯誤,會用下拉式選單(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>

    <br />

     選單2號:<asp:DropDownList ID="DropDownList4" 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>

  

 

2012-5-31 下午 02-34-16  

但是有時候資料庫中記錄的,卻是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();

        }

}

結果如下:

 

2012-5-31 下午 02-47-31  

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

炎龍牙 發表在 痞客邦 PIXNET 留言(0) 人氣()