问题描述
我正在使用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,e) =>
{
e.QueryableSource = Helper.CustomerData();
}).GetHtml()
Helper.CustomerData()
返回一个IQueryable<CustomerData>
。现在想象一下我的表CustomerData
有一个名为IsOpen
的列。仅当publicUrlButton
的值为true时才显示IsOpen
?
解决方法
经过数小时的挖掘终于找到了解决方案。 基本上,您可以使用以下事件来控制行为:
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;
}
}
};