8

ASP.Net MVC アプリケーションで剣道グリッドを使用しています。次のグリッド定義がある場合、

@(Html.Kendo().Grid(Model) //Bind the grid to ViewBag.Products
  .Name("grid")
  .Columns(columns =>
  {
      columns.Bound(p => p.FullName);
      columns.Bound(p => p.MyEnum)
  })
  .Groupable()
  .Pageable()
  .Sortable()
  .Scrollable(scr => scr.Height(600))
  .Filterable()
  )

列の 1 つは Enum です。私の列挙型の定義は次のとおりです。

public enum MyEnum
{
    [Display(AutoGenerateField = false, Name = "My enum 1", Description = "My Enum 1")]
    EnumOne,
    [Display(Name = "My Enum 2")]
    EnumTwo
}

各行に「My Enum 1」または「My Enum 2」を表示するにはどうすればよいですか?

前もって感謝します!

4

4 に答える 4

7

私は最近この問題に遭遇し、使用して解決しました

var someArrayOfValueAndText = new[] {new  {
    Id = 0, Description = "Foo"
}, new  {
    Id = 1, Description = "Bar"
}
.Columns(c.ForeignKey(m=> m.MyEnum, someArrayOfValueAndText, "Id","Description"))

.Bound メソッドの代わりに

于 2014-03-05T14:01:44.847 に答える
2

少し前に、いくつかの拡張メソッドを含むヘルパー クラスを作成しました。

public static class EnumExtensions
{
    public static string GetDisplayName(this Enum enu)
    {
        var attr = GetDisplayAttribute(enu);
        return attr != null ? attr.Name : enu.ToString();
    }

    public static string GetDescription(this Enum enu)
    {
        var attr = GetDisplayAttribute(enu);
        return attr != null ? attr.Description : enu.ToString();
    }

    private static DisplayAttribute GetDisplayAttribute(object value)
    {
        Type type = value.GetType();
        if (!type.IsEnum)
        {
            throw new ArgumentException(string.Format("Type {0} is not an enum", type));
        }

        // Get the enum field.
        var field = type.GetField(value.ToString());
        return field == null ? null : field.GetCustomAttribute<DisplayAttribute>();
    }
}

属性のNameDescriptionを抽出する 2 つのメソッドが含まれています。Display表示名:

columns.Bound(p => p.MyEnum.GetDisplayName())

そして説明のために:

columns.Bound(p => p.MyEnum.GetDescription())

またはビューに using ステートメントを追加するWeb.config必要があります。

アップデート

モデルでそのプロパティを作成するとどうなりますか:

public string MyEnumName
{
    get { return MyEnum.GetDisplayName(); }
}

これで、次を使用できるようになります。

columns.Bound(p => p.MyEnumName);
于 2013-10-26T17:50:24.813 に答える
2

Henk のソリューションは優れています。ただし、ClientTemplate を使用すると、フィルタリング機能を使用できます。

col.Bound(m => m.MyEnum)              // this provides you filtering
   .ClientTemplate("#: MyEnumName #") // this shows a name of enum

kendo ui テンプレートの詳細については、http://docs.telerik.com/kendo-ui/framework/templates/overview を参照してください

于 2015-06-24T16:03:02.263 に答える
2

@ user1967246 メソッドを使用していますが、その方法を詳しく説明したいと思います。

剣道グリッドの上に配列を作成しました

    var statusLikeEntityStatus = new[]
    {
        new {Id = 0, Status = EntityStatus.Passive},
        new {Id = 1, Status = EntityStatus.Active},
        new {Id = 2, Status = EntityStatus.Draft},
        new {Id = 3, Status = EntityStatus.ReadyToLive},
        new {Id = -1, Status = EntityStatus.Freezed},
        new {Id = -2, Status = EntityStatus.Blocked}
    };

次に、Bound の代わりに ForeignKey プロパティを使用します。

     columns.ForeignKey(m => m.Status, statusLikeEntityStatus, "Id", "Status").Title(Resources.General.Status);

これが私の列属性です

.Columns(columns =>
      {
          columns.Bound(m => m.InventoryID).Title("Id");
          columns.Bound(m => m.ERPCode).Title(Resources.Products.ProductCode);
          columns.Bound(m => m.Price).Title(Resources.Products.ListPrice);
          columns.Bound(m => m.Discount).Title(Resources.Products.
          columns.Bound(m => m.Stock).Title(Resources.Products.TotalStock); // todo: Resources
          columns.ForeignKey(m => m.Status, statusLikeEntityStatus, "Id", "Status").Title(Resources.General.Status);

          columns.Command(commandConf =>
          {
              commandConf.Edit();
              commandConf.Destroy();
          });
      })

それがあなたに役立つことを願っています。

于 2016-05-25T07:38:56.890 に答える