2009-06-29 116 views

回答

0

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

如果有更好的方法来实际创建此URL(而不是使用字符串),那将会很不错,但是到目前为止,任何解决方案我提供的可能会在后续版本中打破。

例如(在Page_Load中)

Response.Redirect("~/Employees/List.aspx?ReportsTo=1234"); 
+1

谢谢亚伦。这个技巧现在会做。 – Nikos 2009-07-01 23:50:00

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期货释放。具体来说就是“使用来自过滤器的值填充插入模板”部分。 http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=14475

+0

我只想将默认值设置为出现在List.aspx中的GridView上方的下拉列表中。您的建议似乎将下拉列表添加到Gridview中的FK列(所有使用FK的行)。 – Nikos 2009-06-29 21:02:17

+0

是的,这个解决方案会在显示的地方修改DropDown List。请编辑您的原始问题,并注意您只希望它在过滤器部分中更改,而不是在任何地方。 (并在下面看到我的下一个答案) – 2009-07-01 21:01:11

0

我已经想出了一个解决方法,但我打开一个更优雅的解决方案。

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

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

这似乎工作,但我宁愿使用元数据自定义部分实体类来解决这个如果可能的话。

+0

我想在我的动态下拉列表中使用此代码以使所选值成为特定项目,但是当我尝试选择不同的值时,下拉列表会将其更改回原始指定值。 – jlg 2011-10-31 16:19:42

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)。