ASP.NET动态数据设置下拉列表的默认值

时间:2009-06-29 04:33:55

标签: asp.net dynamic-data

我有一个下拉列表(FK),我想设置它并显示基于登录用户ID的默认值。你能告诉我怎么做吗?我只想影响出现在Gridview上方顶部的下拉过滤器。

由于

尼科斯

4 个答案:

答案 0 :(得分:0)

这是一个普遍的变化,还是只是一个外键关系?

假设它仅用于一个外键关系,您可以创建一个新的FieldTemplate,仅用于该关系。 New FieldTemplate将是默认“ForeignKey”FieldTemplate的副本。在New FieldTemplate中,修改OnDataBinding(或Page_PreRender)事件以设置DropDownList的“默认值”。

然后,要强制将New FieldTemplate用于该关系,您需要在实体类的成员上使用System.ComponentModel.DataAnnotations。 UIHint 属性来表示该外键。关系。 (链接如下)

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.uihintattribute.uihint.aspxhttp://www.asp.net/learn/3.5-SP1/video-291.aspx(约07:30分钟)

要获得一些帮助,您可以查看CodePlex上的DynamicData Futures版本。特别是“使用过滤器中的值填充插入模板”部分。 http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=14475

答案 1 :(得分:0)

我已经找到了解决方法,但我愿意接受更优雅的解决方案。

我通过在PopulateListControl(DropDownList1)之后在Page_Init中插入以下行来编辑FilterUserControl.ascx.cs;

DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText(“Bob”)); //用户名仅为测试而硬编码

这似乎有效,但我更倾向于使用自定义的部分实体类和元数据来解决这个问题。

答案 2 :(得分:0)

如果您只想在“筛选条件”部分中显示的“DropDown”列表中使用此功能,只需通过添加要筛选的QueryString参数来修改URL。 DynamicFilter将从QueryString中获取值并相应地设置DropDown列表。 (fyi。这与ForeignKey.ascx FieldTemplate提供的功能相同)

如果有更好的方法来实际创建此URL(而不是使用字符串)会很好,但截至目前,我提供的任何解决方案可能会在后续版本中中断。

示例(在page_load中)

Response.Redirect("~/Employees/List.aspx?ReportsTo=1234");

答案 3 :(得分:0)

我已经在我正在处理的应用程序中解决了这个问题,在后面的插入视图模板代码中: 在ItemCreated事件中的详细信息视图:

       foreach (DetailsViewRow row in DetailsView1.Rows)
        {
            foreach (Control ctl in row.Controls)
                foreach (Control c in ctl.Controls)
                    foreach (Control x in c.Controls)
                    {
                        if (x.ClientID.Contains("tblName"))
                        {
                            foreach (Control y in x.Controls)
                            {
                                if (y.ClientID.Contains("DropDownList"))
                                {
                                    ddl = y as DropDownList;
                                    ddl.SelectedValue = Convert.ToString(UserId);
                                    ddl.Enabled = false;
                                }
                            }
                        }
                    }
        }

使用此代码,当用户登录并且他们要插入某个实体(tblName)时,已经选择并禁用了下拉列表(fk到userId)。