我有一个下拉列表(FK),我想设置它并显示基于登录用户ID的默认值。你能告诉我怎么做吗?我只想影响出现在Gridview上方顶部的下拉过滤器。
由于
尼科斯
答案 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.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
答案 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)。