摘要: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相同,但是如果這些都不能變動。這也是一種方式^^。
水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。