3

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

谢谢

尼科斯

4

4 回答 4

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

于 2009-06-29T18:35:54.760 回答
0

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

如果有更好的方法来实际创建这个 URL(而不是使用字符串),那就太好了,但到目前为止,我提供的任何解决方案都可能会在后续版本中中断。

示例(在 page_load 中)

Response.Redirect("~/Employees/List.aspx?ReportsTo=1234");
于 2009-07-01T21:33:34.887 回答
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)已被选中并禁用。

于 2010-06-05T15:01:49.850 回答
0

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

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

DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText("Bob")); // 用户名是硬编码的,只是为了测试

这似乎可行,但如果可能的话,我更喜欢使用带有元数据的自定义部分实体类来解决这个问题。

于 2009-06-30T01:06:38.457 回答