簡體   English   中英

在DataGridView列中顯示方法值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM