我有一個應用程序,我需要使用公司名稱填充文本框,並使用數據庫中的所有可用公司名稱填充了自定義的AutoCompleteStringColection。當用戶通過在列表中輸入和選擇公司名稱來更改公司名稱時,我需要擁有所選公司的id(Guid)的新公司名稱,以便我可以查找並獲取公司其餘信息。因爲公司名稱不能保證是唯一的,所以我不能對名稱進行查詢,並希望獲得正確的記錄。我研究了擴展字符串類,但是我能找到的都是添加方法的示例。我試圖通過添加一個變量來存儲id和方法來獲取和設置id,但是當檢索id時它總是最後一個id集。可以通過擴展將屬性添加到類中嗎?我已經改變了我正在嘗試做的查找公司名稱並顯示用戶將從中選擇的列表,如果多個匹配被返回,但我仍然想知道我是否可以以這種方式添加屬性以防萬一它再次出現。使用屬性擴展字符串類?
2
A
回答
7
不,您不能使用屬性擴展類。此外,String
是sealed
,所以您不能通過繼承來擴展它。唯一的辦法是組成:在你自己的班級中封裝string
。
2
這聽起來像你應該創建自己的類:
class Company {
public string Name {get;set;}
public override string ToString() {return Name;}
// etc
}
現在綁定到一組Company
對象; ToString
覆蓋將確保默認顯示Name
,並且您可以添加任何您需要的內容。對於更復雜的場景,您可以使用(例如)DisplayMember
和ValueMember
(組合框的)指向不同的屬性(而不是默認的ToString
)。
1
您應該使用ComboBox而不是TextBox。創建一個包含公司名稱和ID的自定義類型,確保它覆蓋ToString以返回公司名稱。將這些自定義類型添加到ComboBox而不是直接字符串,並使用ListItems的AutoCompleteSource。
0
我用康拉德的答案和爲了完整起見,我在這裏發佈我的解決方案。我需要向我的用戶顯示自動完成的公司名稱列表,但由於他們可能有多個同名的公司,所以我需要Guid ID在數據庫中找到他們的選擇。所以我寫了自己的類繼承自AutoCompleteStringCollection。
public class AutoCompleteStringWithIdCollection : AutoCompleteStringCollection
{
private List<Guid> _idList = new List<Guid>();
/*-- Properties --*/
public Guid this[int index]
{
get
{
return _idList[index];
}
}
public Guid this[string value]
{
get
{
int index = base.IndexOf(value);
return _idList[index];
}
}
/*-- Methods --*/
public int Add(string value, Guid id)
{
int index = base.Add(value);
_idList.Insert(index, id);
return index;
}
public new void Remove(string value)
{
int index = base.IndexOf(value);
if (index > -1)
{
base.RemoveAt(index);
_idList.RemoveAt(index);
}
}
public new void RemoveAt(int index)
{
base.RemoveAt(index);
_idList.RemoveAt(index);
}
public new void Clear()
{
base.Clear();
_idList.Clear();
}
}
相關問題
- 1. C# - 擴展StorageFile類添加自定義字符串屬性
- 2. 用Mixin擴展類屬性
- 3. 使用附加屬性擴展類
- 4. 擴展基類屬性
- 5. CSS - 擴展類屬性
- 6. Python mixin擴展類屬性
- 7. 只讀屬性類擴展
- 8. 楠:字符串擴展性能
- 9. 如何在擴展類後擴展類數組/屬性類的數組屬性?
- 10. OleDb連接字符串中擴展屬性的規範?
- 11. Powershell擴展屬性產生一個長字符串
- 12. Kotlin擴展屬性無法在字符串模板中識別
- 13. 擴展屬性爲csv文件OLEDB連接字符串
- 14. 類型安全擴展字符串 - Java
- 15. 擴展XHTML DTD以在ID屬性中使用特殊字符
- 16. 如何使用get屬性擴展打字稿類?
- 17. 擴展屬性
- 18. 使用「擴展」複製對象變成整數屬性字符串
- 19. 用IsAuthenticated屬性擴展ClaimsPrincipal類
- 20. 如何擴展HashMap以允許字符串,字符串類型
- 21. 在類屬性中擴展類?
- 22. 擴展字符串數組
- 23. 使用擴展字符串的視圖爲mvc的類庫3
- 24. 使用靜態函數擴展字符串類
- 25. 使用字符串作爲ID類型擴展ObjectModel
- 26. 使用自定義轉換類型擴展字符串格式
- 27. 擴展屬性Kotlin
- 28. PropertyFactoryBean屬性擴展
- 29. FUSE擴展屬性
- 30. CSS屬性擴展