2014-10-10 83 views
1

我已經創建了一個輔助函數來綁定asp.net中的下拉列表。 見我的功能:綁定數據文本字段,將數據值字段設置爲asp:Dropdownlist

public void BindDDL(string query, DropDownList DDL) 
    { 
     List<Issuetype> obj = new List<Issuetype>(); 
     Issuetype iss = new Issuetype(); 
     iss.DeptId = 1; 
     iss.Issue = "SSS"; 
     iss.IssuetypeId = 4; 
     obj.Add(iss); 
     //BALissue Bl = new BALissue(); 
     //List<Issuetype> objSource = null; 
     //objSource = Bl.Bind_issuetypes(query); 
     DDL.DataSource = obj; 
     DDL.DataValueField = Convert.ToString(obj[0]); 
     DDL.DataTextField = Convert.ToString(obj[1]); 
     DDL.DataBind(); 

    } 

這樣,如果我發送查詢名稱和下拉列表ID的功能,下拉應該問題類型實體的名單被綁定,你可以看到在代碼中問題類型的屬性。

但是,我無法正確設置DataValueField和DataTextField。每次它說索引超出範圍。

+0

可以通過DataValueField和DataTextField作爲參數傳遞給BindDDL()方法,並使用它們。 – vallabha 2014-10-10 06:22:49

回答

1

其實,有你的代碼沒有obj[1]因爲你必須在obj列表中只有一個項目,所以在

DDL.DataTextField = Convert.ToString(obj[1]); 

這條線,你會得到異常

相反,你可以使用

DDL.DataValueField = "Issue"; 
    DDL.DataTextField = "IssuetypeId"; 

並獲得產權名稱使用Reflection

using System.Reflection; // reflection namespace 
// get all public static properties of MyClass type 
PropertyInfo[] propertyInfos; 
propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public | BindingFlags.Static); 
// sort properties by name 
Array.Sort(propertyInfos, 
     delegate(PropertyInfo propertyInfo1, PropertyInfo propertyInfo2) 
     { return propertyInfo1.Name.CompareTo(propertyInfo2.Name); }); 
// write property names 
foreach (PropertyInfo propertyInfo in propertyInfos) 
{ 
    Console.WriteLine(propertyInfo.Name); 
} 
+0

我想爲不同的列表使用此函數,有沒有辦法通過索引 – user3452210 2014-10-10 06:20:26

+0

@ user3452210獲取屬性名稱,您可以將DataValueField和DataTextField作爲參數傳遞給BindDDL()方法並使用它們。 – vallabha 2014-10-10 06:22:33

+0

我可以做到這一點,但我正在尋找一個簡單的解決方案,我們可以在列表中獲取屬性名稱。 – user3452210 2014-10-10 06:25:05

1

DataValueFieldDataTextField應該是集合中字段的名稱,而不是集合中的值。

DDL.DataSource = obj; 
    DDL.DataValueField = "Issue"; //example choose what is needed 
    DDL.DataTextField = "IssuetypeId"; //example choose what is needed 
    DDL.DataBind(); 

例外是在您的收藏,因爲扔你有1個項目,但你試圖把第二個項目(不存在)在DataTextField。但是,如果你修復你的代碼,這是不相關的。

1

您需要指定鍵和值字段。在你的情況下,你要添加一個項目列表,但嘗試訪問第二個(不存在)項目,同時試圖指定值:Convert.ToString(obj[1])

你可能就要這是什麼:

DDL.DataValueField = "IssuetypeId"; 
DDL.DataTextField = "Issue"; 
相關問題