我有一个下拉列表 (FK),我想根据登录用户 ID 设置和显示默认值。你能告诉我怎么做吗?我只想影响出现在 Gridview 上方的下拉过滤器。
谢谢
尼科斯
我有一个下拉列表 (FK),我想根据登录用户 ID 设置和显示默认值。你能告诉我怎么做吗?我只想影响出现在 Gridview 上方的下拉过滤器。
谢谢
尼科斯
这是一个普遍的变化,还是只针对一个外键关系?
假设它仅用于一个外键关系,您可以创建一个新的 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.aspx 或http://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
如果您只想在过滤条件部分中显示的下拉列表中使用此功能,只需通过添加您要过滤的 QueryString 参数来修改 URL。DynamicFilter 将从 QueryString 中提取值并相应地设置 DropDown 列表。(仅供参考。这与 ForeignKey.ascx FieldTemplate 提供的功能相同)
如果有更好的方法来实际创建这个 URL(而不是使用字符串),那就太好了,但到目前为止,我提供的任何解决方案都可能会在后续版本中中断。
示例(在 page_load 中)
Response.Redirect("~/Employees/List.aspx?ReportsTo=1234");
我已经在我正在处理的应用程序中解决了这个问题,在您后面的插入视图模板代码中:在 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)已被选中并禁用。
我已经找到了一种解决方法,但我愿意接受更优雅的解决方案。
我通过在 PopulateListControl(DropDownList1) 之后的 Page_Init 中插入以下行来编辑 FilterUserControl.ascx.cs;
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText("Bob")); // 用户名是硬编码的,只是为了测试
这似乎可行,但如果可能的话,我更喜欢使用带有元数据的自定义部分实体类来解决这个问题。