[ASP.NET]如何控制 GridView 中的控制項(如Button...)設定它的屬性,如顯示、啟用...

如何控制 GridView 中的控制項(如Button...)設定它的屬性,如顯示、啟用...

有朋友談到「如何讓 GridView 中每列上面的 編輯Button 當價格欄位值超過 25000 時,就不要顯示出來」。如下,

image

 

可在 GridView 的 DataBound 裡去找到該 Button ,然後再判斷 價格的值,然後設定該Button的顯示與否。

另一個方式,可以使用 內嵌運算式 (inline expressions) 哦!

例如在 aspx.cs 中新增一個 DataTable (變數名為dt, ) ,然後 Bind 給 GridView (GridView1),如下


protected void Page_Load(object sender, EventArgs e)
{
	if (Page.IsPostBack==false)
		BindData();


}

private void BindData()
{
	DataTable dt = new DataTable();
	dt.Columns.Add("price", typeof(decimal));
	dt.Rows.Add(25000);
	dt.Rows.Add(300);
	dt.Rows.Add(30000);
	dt.Rows.Add(100);
	GridView1.DataSource = dt;
	GridView1.DataBind();
}

 

而ASPX中,在 GridView 中分別用 Button1, 及 Button2 來示範 inline expressions


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
	<asp:TemplateField HeaderText="MyButtons">
		<ItemTemplate>
			<asp:Button ID="Button1" runat="server" Text="Edit"
				Visible='<%# !IsGreaterThen25000(Eval("price")) %>' />

			<asp:Button ID="Button2" runat="server" Text="Edit"
				Visible='<%# (decimal.Parse(Eval("price").ToString()) < 25000) %>' />
		</ItemTemplate>
	</asp:TemplateField>

	<asp:TemplateField HeaderText="price">
		<ItemTemplate>
			<asp:Label ID="Label1" runat="server" Text='<%# Eval("price") %>'></asp:Label> 
		</ItemTemplate>

	</asp:TemplateField>
	<asp:BoundField DataField="price" HeaderText="price" SortExpression="price"></asp:BoundField>
</Columns>
</asp:GridView>

 

在 ASPX.CS 中準備給 ASPX inline expressions 所使用的 Method (IsGreaterThen25000),如下,


protected bool IsGreaterThen25000(object price)
{
	decimal comparePrice = 0;
	decimal compareValue = 25000;
	decimal.TryParse(price.ToString(), out comparePrice);
	return comparePrice >= compareValue;
}

 

參考資料

詢問一下ASP.NET GridView

ASPX中使用ASPX.VB的Function

在.NET Framework 中的 ASP.NET 內嵌運算式的簡介

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^