ASP.NET动态数据设置下拉列表的默认值
如果您只希望在过滤条件部分中出现的DropDown列表中使用此功能,只需通过添加您想过滤的QueryString参数来修改URL。 DynamicFilter将从QueryString中获取值并相应地设置DropDown列表。 (fyi。这与ForeignKey.ascx FieldTemplate提供的功能相同)
如果有更好的方法来实际创建此URL(而不是使用字符串),那将会很不错,但是到目前为止,任何解决方案我提供的可能会在后续版本中打破。
例如(在Page_Load中)
Response.Redirect("~/Employees/List.aspx?ReportsTo=1234");
这是一个普遍的变化,或者仅仅是为了一个外键关系?
假设这只是一个外键关系,您可以创建一个新的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期货释放。具体来说就是“使用来自过滤器的值填充插入模板”部分。 http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=14475
我只想将默认值设置为出现在List.aspx中的GridView上方的下拉列表中。您的建议似乎将下拉列表添加到Gridview中的FK列(所有使用FK的行)。 – Nikos 2009-06-29 21:02:17
是的,这个解决方案会在显示的地方修改DropDown List。请编辑您的原始问题,并注意您只希望它在过滤器部分中更改,而不是在任何地方。 (并在下面看到我的下一个答案) – 2009-07-01 21:01:11
我已经想出了一个解决方法,但我打开一个更优雅的解决方案。
我通过在PopulateListControl(DropDownList1)后面的Page_Init中插入以下行来编辑FilterUserControl.ascx.cs;
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText(“Bob”)); //用户名是硬编码只是为了测试
这似乎工作,但我宁愿使用元数据自定义部分实体类来解决这个如果可能的话。
我想在我的动态下拉列表中使用此代码以使所选值成为特定项目,但是当我尝试选择不同的值时,下拉列表会将其更改回原始指定值。 – jlg 2011-10-31 16:19:42
我已经在我的工作中的应用程序解决了这一点,在你插入视图模板后面的代码: 在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)。
谢谢亚伦。这个技巧现在会做。 – Nikos 2009-07-01 23:50:00