Как показать или скрыть и элемент при использовании Devexpress Cardview на основе значения столбца таблицы

#c# #devexpress #devexpress-mvc #devexpress-gridcontrol

#c# #devexpress #devexpress-mvc #devexpress-gridcontrol

Вопрос:

Я использую Devexpress CardView и выполняю привязку к базе данных следующим образом:

     var cardView = Html.DevExpress().CardView(settings =>
    {
      settings.Name = "MyCardView";
    }

    @cardView.BindToEF(string.Empty, string.Empty, (s, e) =>
    {
      e.QueryableSource = Helper.CustomerData();
    }).GetHtml()
  

Теперь я могу добавить ссылку в верхнюю часть карты, выполнив это:

     var cardView = Html.DevExpress().CardView(settings =>
    {
      settings.Name = "MyCardView";
      settings.CardLayoutProperties.Items.AddGroupItem(g =>
      {
          g.ColSpan = 1;
          g.ShowCaption = DefaultBoolean.False;
          g.GroupBoxDecoration = GroupBoxDecoration.None;

          var cmdLayoutItem = new CardViewCommandLayoutItem();
          cmdLayoutItem.HorizontalAlign = FormLayoutHorizontalAlign.Right;

          var publicUrlButton = new CardViewCustomCommandButton();
          publicUrlButton.ID = "Link123";
          publicUrlButton.Text = "My Funny Url";

          cmdLayoutItem.CustomButtons.Add(publicUrlButton);
          g.Items.Add(cmdLayoutItem);
        });

        settings.Columns.Add(c =>
        {
            c.FieldName = "Id";
            c.Caption = "Id";
            c.ReadOnly = true;
            c.Visible = false;
        });

        settings.Columns.Add(c =>
        {
            c.FieldName = "IsOpen";
            c.Caption = "IsOpen";
            c.ReadOnly = true;
            c.Visible = false;
        });
    }

    @cardView.BindToEF(string.Empty, string.Empty, (s, e) =>
    {
      e.QueryableSource = Helper.CustomerData();
    }).GetHtml()

  

Helper.CustomerData() Возвращает an IQueryable<CustomerData> . Теперь представьте, что в моей таблице CustomerData есть столбец с именем IsOpen . Как я могу показать publicUrlButton только тогда, когда значение IsOpen равно true?

Ответ №1:

Наконец-то нашел решение после нескольких часов копания. В принципе, вы можете использовать следующее событие для управления поведением:

         settings.CustomButtonInitialize = (s, e) =>
        {
            var cv = s as MVCxCardView;
            if (cv == null)
            {
                return;
            }

            var isOpen = cv.GetCardValues(e.VisibleIndex, "IsOpen");
            if (!isOpen)
            {
                if (e.ButtonID == "Link123")
                {
                    e.Visible = DefaultBoolean.False;
                }
            }
        };