2009-06-29 161 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)。