WinForm 中ComboBox 绑定总结
?1. DataTable
用DataTable直接綁定,只需要設置DataSource、DisplayMember、ValueMember三個屬性即可。
Codethis.cmbConsumeSuperMarket.DataSource?=?dtSuperMarket;
this.cmbConsumeSuperMarket.DisplayMember?=?"Name";?this.cmbConsumeSuperMarket.ValueMember?=?"ID";?this.cmbConsumeSuperMarket.SelectedIndex?=?0;
在使用時使用如下方式,即可取得相應的ID和Name,這樣就可以基本滿足業務要求了。
StringTools.ObjectToInt(this.cmbConsumeSuperMarket.SelectedValue);StringTools.ObjectToStr(this.cmbConsumeSuperMarket.SelectedText);
但如上的問題是,因為ComboBox綁定后默認顯示第一項,但需要一項提示性選項,我沒有找到什么好方法實現了。
上網看一些人用ComboBox.SelectedIndex = -1或設置ComboBox.Text或初始化設置ComboBox.Items一個項為初始項或設置ComboBox.DropDownStyle,但我這里都沒達到效果。
本應實現效果A,但以上只能實現B效果,所以以上不符合要求。
效果A???? 效果B
?
2. ComboBox.Items.Add
一開始使用時,以為像Asp.net那樣有ListItem屬性可以使用,但Items只有幾個特別簡單的屬性,還好Add(object item),所以就只能在object這里作文章了。
?所以就把要綁定的item新new 了一個對象,再重寫ToString(),如是乎就可以了。
因為在整個頁面中,有很多類似的ComboBox控件,所以就小小的抽象了一下,然后就可以便捷的實現效果B了。具體實現方式如下:
Codeusing?System.Data;
using?System.Windows.Forms;
namespace?BlackCore.App.Method
{
????//抽象類?DataBindControls?引入抽象方法?dataBindComboBox(……)
????public?abstract?class?DataBindControls
????{
????????///?<summary>
????????///?綁定ComboBox
????????///?</summary>
????????///?<param?name="cmb">ComboBox?Control</param>
????????///?<param?name="isInsertDefaultItem">是否為此控件插入一個默認選項且默認選中</param>
????????///?<param?name="dt">需要綁定的DataTable</param>
????????///?<param?name="selectedText">顯示文字(DisplayMember)</param>
????????///?<param?name="selectedValue">ValueMember</param>
????????public?abstract?void?dataBindComboBox(ComboBox?cmb,?bool?isInsertDefaultItem,?DataTable?dt,?string?selectedText,?string?selectedValue);
????}
}
實現抽象即可?
Codeusing?System.Data;
using?System.Windows.Forms;
using?BlackCore.FinancialLibrary;
namespace?BlackCore.App.Method
{
????//實現抽象
????//類?DataBindControlsImplement?重寫?dataBindComboBox,并提供一個具體實現。
????//由于?DataBindControlsImplement?中沒有了抽象成員,因此可以(但并非必須)將?DataBindControlsImplement?聲明為非抽象類。
????public?class?DataBindControlsImplement?:?DataBindControls
????{????????
????????public?override?void?dataBindComboBox(ComboBox?comboBox,?bool?isInsertDefaultItem,?DataTable?dataTable,?string?selectedText,?string?selectedValue)
????????{
????????????if?(dataTable?!=?null?&&?dataTable.Rows?!=?null?&&?dataTable.Rows.Count?>?0)
????????????{
????????????????if?(comboBox.Items.Count?>?0)
????????????????{
????????????????????comboBox.Items.Clear();
????????????????}
????????????????int?i?=?1;
????????????????foreach?(DataRow?dataRow?in?dataTable.Rows)
????????????????{
????????????????????//comboBox.SelectedText?=?StringTools.ObjectToStr(dataRow[selectedText]).Trim?();
????????????????????//comboBox.SelectedValue?=?StringTools.ObjectToInt(dataRow[selectedValue]).ToString?();
????????????????????//BlackCore.BLL.FinancialManage.FMProject?bllProject?=?new?BlackCore.BLL.FinancialManage.FMProject();
????????????????????//BlackCore.Model.FinancialManage.FMProject?modelProject?=?new?BlackCore.Model.FinancialManage.FMProject();
????????????????????//modelProject?=?bllProject.GetModel(StringTools.ObjectToInt(dataRow["ID"]));
????????????????????//用如下這種方式就只有selectedText,而沒有selectedValue
????????????????????//comboBox.Items.Add(StringTools.ObjectToStr(dataRow[selectedText]).Trim());
????????????????????//可以存儲在ComboBox中的任何種類的對象,而不是字符串。重寫toString()方法生成的文本框將顯示。
????????????????????//這樣就可以實現selectedText,selectedValue或更多需要的屬性
????????????????????comboBox.Items.Add(new?ComboBoxItemTextValue(StringTools.ObjectToInt(dataRow[selectedValue]).ToString(),?StringTools.ObjectToStr(dataRow[selectedText])));
????????????????}
????????????????if?(isInsertDefaultItem)
????????????????{
????????????????????comboBox.Items.Insert(0,?"請選擇");
????????????????}
????????????????comboBox.SelectedIndex?=?0;
????????????}????????????
????????}
????????public?class?ComboBoxItemTextValue
????????{
????????????public?string?selectText;
????????????public?string?selectValue;????????????
????????????public?ComboBoxItemTextValue(string?_selectValue,?string?_selectText)
????????????{
????????????????selectValue?=?_selectValue;
????????????????selectText?=?_selectText;
????????????}
????????????public?override?string?ToString()
????????????{
????????????????return?selectText;
????????????}
????????}
????}
}
ComboBox的綁定
CodeDataBindControlsImplement?implement?=?new?BlackCore.App.Method.DataBindControlsImplement();
implement.dataBindComboBox(this.searchCmbConsumeMarket,?true,?bllMarket.GetList("").Tables[0],?"Name",?"ID");
ComboBox的獲取?
Codeif?(StringTools.ObjectToInt(searchCmbConsumeMarket.SelectedIndex)?!=?0)
{
????DataBindControlsImplement.ComboBoxItemTextValue?comboItem?=?
????????(DataBindControlsImplement.ComboBoxItemTextValue)this.searchCmbConsumeProject.SelectedItem;
????????string?selectedText?=?comboItem.selectText;
????????int?selectedValue?=?comboItem.selectValue;
}
?
?
本人初學WinForm開發,以上內容是個人整理以便有需而用,其若有誤,煩請幫忙指點更正,衷心感謝!BlackCore敬上!
?
?
轉載于:https://www.cnblogs.com/blackcore/archive/2009/11/20/1606896.html
總結
以上是生活随笔為你收集整理的WinForm 中ComboBox 绑定总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为iptables开放新的网络端口
- 下一篇: 【转载】2010年最全最新令人无语语录