Отображение значения метода в столбце DataGridView - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть класс Order со свойством Enum Status.

Когда я отправляю список в DataGridView, он показывает столбец Status в виде тега Enum, например «PaymentWaiting». Правильным должно быть «Ожидание платежа».

У меня есть метод, который получает перечисление Status и возвращает строку с правильным именем. Как указать метод в качестве значения столбца?

Ответы [ 3 ]

1 голос
/ 02 ноября 2011

Один из подходов - преобразовать столбец Status в столбец шаблона и указать свой метод helpmer следующим образом:

<asp:TemplateField HeaderText="Status">
<ItemTemplate>
<asp:Literal runat="server" Text='<%#EnumToString(Eval("Status")) %>'></asp:Literal>
</ItemTemplate>
</asp:TemplateField>

Но учтите, что EnumToString должен получить объект вместо типа Enum, поскольку Eval возвращает object; Поэтому ваш метод должен выглядеть примерно так:

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();
}

Снимок результата

enter image description here

0 голосов
/ 01 ноября 2011

<%# MethodName(Eval("ColumnValueToFormat") %>

0 голосов
/ 01 ноября 2011

Использовать свойство вместо метода

public string SplitedStatus
{
    get {return /* parsed status logic here */}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...