[英]Binding a combobox to an enum and passing the values back to a stored procedure
您好,我是 C# 新手,如果我試圖以完全錯誤的方式執行此操作,我深表歉意!
我正在嘗試使用枚舉中的值填充組合框,然后將枚舉中的值傳遞回存儲過程。
至於在組合框中顯示正確的項目,它工作正常我在下拉菜單中得到“訂單號”和“帳號”我試圖讓用戶可以選擇其中一個選項,我可以將 1 或 2 傳回我的存儲過程。
所有與組合框相關的代碼都來自我在嘗試自己解決這個問題時在這里找到的其他帖子。
目前我正在使用 -
public enum SearchType
{
[Description("Order Number")]
OrderNumber = 1,
[Description("Account Number")]
AccountNumber = 2
}
public void LoadComboBoxSearchType(ComboBox cbo)
{
cbo.DataSource = System.Enum.GetValues(typeof(Customers.SearchType))
.Cast<System.Enum>()
.Select(value => new
{
(Attribute.GetCustomAttribute(value.GetType().GetField(value.ToString()), typeof(DescriptionAttribute)) as DescriptionAttribute).Description,
value
})
.OrderBy(item => item.value)
.ToList();
cbo.DisplayMember = "Description";
cbo.ValueMember = "value";
}
因此,當我嘗試將值從組合框(期望 1 或 2)傳遞到存儲過程時,我只是獲得了“值”。
我正在調用存儲過程,例如 -
private void ButtonOutboundGridView_Click(object sender, EventArgs e)
{
OutboundDatas = DataAccess.GetOutboundDatas(ComboBoxSearchType.ValueMember, TextBoxSearchRef.Text);
}
這是使用枚舉的糟糕方式嗎,我是否過於復雜了?
謝謝!
我設法找到了解決方案......我想我會把它發布給任何可能看到類似問題的人 -
我結合了此鏈接中的代碼-
使用我已經擁有的內容,在組合框中顯示描述(因此可以使用文本值更好地格式化),但也將值保留為枚舉中的數值。
public void LoadComboBoxSearchType(ComboBox cbo)
{
cbo.DataSource = System.Enum.GetValues(typeof(Customers.SearchType))
.Cast<Customers.SearchType>()
.Select(p => new
{
Key = (int)p,
Value = (Attribute.GetCustomAttribute(p.GetType().GetField(p.ToString()),
typeof(DescriptionAttribute)) as DescriptionAttribute).Description,
p
})
.ToList();
cbo.DisplayMember = "Value";
cbo.ValueMember = "Key";
}
所以現在我可以在我的組合框上使用 .SelectedValue 將鍵(1 或 2)傳遞給我的存儲過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.