[英]Showing a method value in a DataGridView column
我有一個帶有Enum屬性Status
的類Order
。
當我將列表發送到DataGridView時,它會將Status
列顯示為枚舉標簽,例如“ PaymentWaiting”。 正確的必須是“付款等待”。
我有一個接收Status
枚舉並返回正確名稱的字符串的方法。 如何將方法指定為列值?
一種方法是將“ Status
列轉換為模板列,並按如下方式指定您的輔助方法:
<asp:TemplateField HeaderText="Status">
<ItemTemplate>
<asp:Literal runat="server" Text='<%#EnumToString(Eval("Status")) %>'></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
但是請注意,由於Eval
返回object
,因此EnumToString
需要接收一個對象而不是Enum
類型。 因此,您的方法應如下所示:
protected string EnumToString(object s)
{
switch ((EStatus) Enum.Parse(typeof(EStatus), s.ToString()))
{
case EStatus.AwaitingApproval: return "Awaiting Approval";
case EStatus.PaymentWaiting: return "Payment Waiting";
default: return s.ToString();
}
}
詳細資料
標記
<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">
<Columns>
<asp:BoundField DataField="Column1" />
<asp:TemplateField HeaderText="Status">
<ItemTemplate>
<asp:Literal runat="server" Text='<%#EnumToString(Eval("Status")) %>'></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
//My Enum definition
public enum EStatus
{
Pending,
Ready,
Ordered,
AwaitingApproval,
PaymentWaiting
}
//this is how I populate my grid with dummy data
private void bindGridView()
{
DataTable t = new DataTable();
t.Columns.Add("Column1");
t.Columns.Add("Status");
DataRow r = null;
for (int i = 0; i < 10; i++)
{
r = t.NewRow();
if(i%2==0)
r.ItemArray = new object[] { "Name "+i, EStatus.AwaitingApproval};
else
r.ItemArray = new object[] { "Name " + i, EStatus.PaymentWaiting };
t.Rows.Add(r);
}
GridView1.DataSource = t;
GridView1.DataBind();
}
結果快照
使用屬性代替方法
public string SplitedStatus
{
get {return /* parsed status logic here */}
}
<%# MethodName(Eval("ColumnValueToFormat") %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.