iT邦幫忙

DAY 20
2

Kuick Hands on Labs系列 第 20

Kuick Hands on Labs -- 20. 優化新增表單(外鍵欄位)

  • 分享至 

  • xImage
  •  

欄位定義成外鍵,這代表存在著 1 對多的資料關連,與優化列舉表單的結果相似,編修外鍵欄位值,僅需透過選取項目即可達成。
外鍵欄位內存的資料是參照其他 Entity 的 PK 值,參照的資料量通常多到已經不適合採用 <radio> 表單的設計模式,而是比較適合使用 <select> 表單設計模式,尤其是在欄位定義成 allow null 時,<select> 可以提供一個 value 屬性值為空字串的 <option> 選項,以滿足 allow null 的欄位定義,但是如果參照資料表的資料量過多,<select> 表單設計模式就將不再合適。這裡我們先假設,參照的資料量尚適合以 <select> 表單呈現,大量參照值的情況,留待後續說明。

處理步驟:
1. 判定資料欄位是否為外鍵欄位

if(
	null != column.Refer.Type
	&&
	column.Spec.DbType != SqlDataType.Enum
	&&
	column.Spec.DbType != SqlDataType.Bit) {
	// code here!
}

2. 從 Entity 快取裡,取出該外鍵欄位參照的所有資料

IEntity refSchema = EntityCache.GetFirst(column.Refer.Type);
List<IEntity> instances = refSchema.References;

3. 以<select>表單呈現

sb.AppendFormat(
	"<select id=\"{0}\" name=\"{0}\">",
	column.AsName
);
if(!column.Spec.NotAllowNull) {
	// allow null 欄位,新增一個 value 屬性為空字串的選項
	sb.Append("<option>-- 請選擇 --</option>");
}
foreach(var instance in instances) {
	sb.AppendFormat(
		"<option value=\"{0}\">{1}</option>",
		instance.KeyValue,
		instance.TitleValue
	);
}
sb.Append("</select>");


上一篇
Kuick Hands on Labs -- 19. 優化新增表單(列舉欄位)
下一篇
Kuick Hands on Labs -- 21. 優化新增表單(布林與日期欄位)
系列文
Kuick Hands on Labs30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言