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

3

我有一个下拉列表(FK),我想根据登录用户ID设置和显示默认值。请告诉我如何做到这一点?我只想影响出现在GridView上方的下拉筛选器。

谢谢

Nikos

4个回答

0
如果你只想要在"Filter Criteria"部分中的下拉列表格中使用此功能,只需通过添加你想要过滤的QueryString参数来修改URL即可。DynamicFilter 将从 QueryString 中获取值并相应地设置下拉列表。(这是 ForeignKey.ascx FieldTemplate 提供的同样功能)
目前最好的方式是使用字符串创建URL, 但希望未来会有更好的方法。然而,我提供的任何解决方案可能在后续版本中失效。
示例(在 page_load 中)
Response.Redirect("~/Employees/List.aspx?ReportsTo=1234");

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)已经被选中并被禁用。

我应该在哪里找到ItemCreated函数? - Hassan Voyeau

0

这是一个通用的更改,还是只针对一个外键关系?

假设它只针对一个外键关系,您可以创建一个新的FieldTemplate,仅用于该关系。 新的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


我只想将出现在List.aspx中GridView上方的下拉列表设置为默认值。你的建议似乎是在我的Gridview中的FK列中添加下拉列表(所有FK行)。 - Nikos
是的,这个解决方案会修改下拉列表在它被显示的任何地方。请编辑您的原始问题并注意您只想在筛选部分更改它,而不是在任何地方都更改。(请参见下面我的下一个答案) - Aaron Hoffman

0

我已经找到了一个解决方法,但是如果有更优雅的解决方案我也愿意尝试。

我在FilterUserControl.ascx.cs中编辑了以下行代码,并在PopulateListControl(DropDownList1)之后插入了它:

DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText("Bob")); // 用户名只是用于测试而硬编码

这个方法似乎可行,但如果可能的话,我更愿意使用带元数据的自定义部分类来解决这个问题。


我正在尝试在我的动态下拉列表中使用此代码,以使所选值成为特定项目,但当我尝试选择不同的值时,下拉列表会将其更改回原始指定值。 - Jamie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接