[ASP.NET]在前端網頁利用資料庫值決定控制項是否可用(enabled 或 visable屬性)

  • 445
  • 0

當Active值為"Y"時,讓"刪除"按鈕的屬性eabled='true'

Enabled='<%# Eval("Active").Equals("Y") %>'

 

撈資料的sql 如下:

SELECT Active, Create_Date FROM tableA

 

呈現資料的畫面如下:

GridView裡面逐行顯示"刪除"按鈕。若該筆資料是無效資料,則"刪除"按鈕不可用(enabled='false'); 也就是說,當Active值為"Y"時,讓"刪除"按鈕的屬性eabled='true'。

完整的GridView如下:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CssClass="gridview medium"
	AllowPaging="True" AllowSorting="True" OnRowCommand="GridView1_RowCommand">
	<Columns>
		<asp:BoundField DataField="Active" HeaderText="有效" SortExpression="Active" />
		 <asp:BoundField DataField="Create_Date" HeaderText="資料創建時間" SortExpression="Create_Date"
			DataFormatString="{0:yyyy/MM/dd HH:mm:ss}" />
		<asp:TemplateField ShowHeader="False" Visible="false">
			<ItemTemplate>
				<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="false" CommandArgument='<%# Eval("Index") %>'
					CommandName="Open">編輯</asp:LinkButton>
			</ItemTemplate>
		</asp:TemplateField>
		<asp:TemplateField ShowHeader="False">
			<ItemTemplate>
				<asp:LinkButton ID="lnbDelete" runat="server" OnClientClick="return confirm('確定刪除?');"
					CausesValidation="false" CommandArgument='<%# Eval("Index") %>' CommandName="Del"
					 Enabled='<%# Eval("Active").Equals("Y") %>'>刪除</asp:LinkButton>
			</ItemTemplate>
		</asp:TemplateField>
	</Columns>
	<EmptyDataTemplate>
		沒有資料
	</EmptyDataTemplate>
</asp:GridView>

重點來了,正確的寫法是:

Enabled='<%# Eval("Active").Equals("Y") %>'

 

這樣寫就不對了,因為傳回的是字串,但Enable屬性要吃的是bool值,造成轉型失敗,會出現"無法將型別 'string' 轉換為 'bool'"的錯誤訊息:

If(Eval("Active") == "Y", "TRUE", "FALSE")