3

将 ASP.NET 与动态数据结合使用,我的页面如下所示:

在此处输入图像描述

我想隐藏下拉列表Invoicing CompleteRestricted Hours页面顶部。我使用以下方法使它们从表中不可见:

[HideColumnIn(PageTemplate.ListDetails, PageTemplate.List)]
[ReadOnlyColumnIn(PageTemplate.Edit)]
[DisplayName("Invoicing Complete")]
public object Invoicing_Complete { get; set; }

但它们仍以下拉菜单的形式出现在顶部。我不能使用[ScaffoldColumn(false)]它,因为它完全隐藏了它,我需要用户从页面Edit.aspx中查看它。Insert.aspx

请指教。

编辑:有人有什么想法吗?似乎无法找到如何做到这一点......我是否正确解释了 Q ?

4

1 回答 1

3

John、HideColumnInReadOnlyColumnIn是隐藏而不是过滤器(外键过滤器)的属性。

您可以使用多种方法解决此问题。

第一种方式,如果您使用的是.NET Framework 4.5.NET Framework 4,您可以使用DisplayAttributeAutoGenerateFilter 属性。例如,

[Display(Name = "Invoicing Complete", AutoGenerateFilter = false)]

您可以在AutoGenerateFilter上找到更多信息。

第二种方法是创建新属性(如HideColumnIn),然后为ForeignKey过滤器更改 Code-Behind。

一些例子:

HideFilterAttribute.cs

using System;

namespace iSite.Classes.Attributes
{
    [AttributeUsage(AttributeTargets.Property)]
    public class HideFilterAttribute : Attribute
    {
        public Boolean Hide { get; private set; }

        public HideFilterAttribute(Boolean hide)
        {
            this.Hide = hide;
        }

        // default
        public static HideFilterAttribute Default =
            new HideFilterAttribute(false);
    }
}

外键.ascx.cs

public partial class ForeignKeyFilter : System.Web.DynamicData.QueryableFilterUserControl
{
        protected void Page_Init(object sender, EventArgs e)
        {
                string initialValue = DefaultValue;
                if (initialValue == null && Column.Attributes.OfType<HideFilterAttribute>().DefaultIfEmpty(HideFilterAttribute.Default).First().Hide)
                {
                        this.NamingContainer.Visible = false;
                }
                else
                {
                        PopulateListControl(DropDownList1);
                        if (!String.IsNullOrEmpty(initialValue))
                        {
                                ListItem li = new ListItem();
                                li = DropDownList1.Items.FindByValue(initialValue);
                                DropDownList1.Items.Clear();
                                DropDownList1.Items.Add(li);
                        }
                }
        }
}

第三种和第四种方式没有 DynamicData 方式。您可以为此列使用自定义过滤器,并通过Visible属性隐藏 DropDownList 控件。您还可以通过 jQuery 库隐藏 DropDownList 控件。

于 2013-04-14T15:27:37.780 回答