WinForm 中ComboBox 绑定总结
?1. DataTable
用DataTable直接綁定,只需要設(shè)置DataSource、DisplayMember、ValueMember三個(gè)屬性即可。
Codethis.cmbConsumeSuperMarket.DataSource?=?dtSuperMarket;
this.cmbConsumeSuperMarket.DisplayMember?=?"Name";?this.cmbConsumeSuperMarket.ValueMember?=?"ID";?this.cmbConsumeSuperMarket.SelectedIndex?=?0;
在使用時(shí)使用如下方式,即可取得相應(yīng)的ID和Name,這樣就可以基本滿足業(yè)務(wù)要求了。
StringTools.ObjectToInt(this.cmbConsumeSuperMarket.SelectedValue);StringTools.ObjectToStr(this.cmbConsumeSuperMarket.SelectedText);
但如上的問(wèn)題是,因?yàn)镃omboBox綁定后默認(rèn)顯示第一項(xiàng),但需要一項(xiàng)提示性選項(xiàng),我沒(méi)有找到什么好方法實(shí)現(xiàn)了。
上網(wǎng)看一些人用ComboBox.SelectedIndex = -1或設(shè)置ComboBox.Text或初始化設(shè)置ComboBox.Items一個(gè)項(xiàng)為初始項(xiàng)或設(shè)置ComboBox.DropDownStyle,但我這里都沒(méi)達(dá)到效果。
本應(yīng)實(shí)現(xiàn)效果A,但以上只能實(shí)現(xiàn)B效果,所以以上不符合要求。
效果A???? 效果B
?
2. ComboBox.Items.Add
一開(kāi)始使用時(shí),以為像Asp.net那樣有ListItem屬性可以使用,但I(xiàn)tems只有幾個(gè)特別簡(jiǎn)單的屬性,還好Add(object item),所以就只能在object這里作文章了。
?所以就把要綁定的item新new 了一個(gè)對(duì)象,再重寫(xiě)ToString(),如是乎就可以了。
因?yàn)樵谡麄€(gè)頁(yè)面中,有很多類(lèi)似的ComboBox控件,所以就小小的抽象了一下,然后就可以便捷的實(shí)現(xiàn)效果B了。具體實(shí)現(xiàn)方式如下:
Codeusing?System.Data;
using?System.Windows.Forms;
namespace?BlackCore.App.Method
{
????//抽象類(lèi)?DataBindControls?引入抽象方法?dataBindComboBox(……)
????public?abstract?class?DataBindControls
????{
????????///?<summary>
????????///?綁定ComboBox
????????///?</summary>
????????///?<param?name="cmb">ComboBox?Control</param>
????????///?<param?name="isInsertDefaultItem">是否為此控件插入一個(gè)默認(rèn)選項(xiàng)且默認(rèn)選中</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);
????}
}
實(shí)現(xiàn)抽象即可?
Codeusing?System.Data;
using?System.Windows.Forms;
using?BlackCore.FinancialLibrary;
namespace?BlackCore.App.Method
{
????//實(shí)現(xiàn)抽象
????//類(lèi)?DataBindControlsImplement?重寫(xiě)?dataBindComboBox,并提供一個(gè)具體實(shí)現(xiàn)。
????//由于?DataBindControlsImplement?中沒(méi)有了抽象成員,因此可以(但并非必須)將?DataBindControlsImplement?聲明為非抽象類(lèi)。
????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,而沒(méi)有selectedValue
????????????????????//comboBox.Items.Add(StringTools.ObjectToStr(dataRow[selectedText]).Trim());
????????????????????//可以存儲(chǔ)在ComboBox中的任何種類(lèi)的對(duì)象,而不是字符串。重寫(xiě)toString()方法生成的文本框?qū)@示。
????????????????????//這樣就可以實(shí)現(xiàn)selectedText,selectedValue或更多需要的屬性
????????????????????comboBox.Items.Add(new?ComboBoxItemTextValue(StringTools.ObjectToInt(dataRow[selectedValue]).ToString(),?StringTools.ObjectToStr(dataRow[selectedText])));
????????????????}
????????????????if?(isInsertDefaultItem)
????????????????{
????????????????????comboBox.Items.Insert(0,?"請(qǐng)選擇");
????????????????}
????????????????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;
}
?
?
本人初學(xué)WinForm開(kāi)發(fā),以上內(nèi)容是個(gè)人整理以便有需而用,其若有誤,煩請(qǐng)幫忙指點(diǎn)更正,衷心感謝!BlackCore敬上!
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/blackcore/archive/2009/11/20/1606896.html
總結(jié)
以上是生活随笔為你收集整理的WinForm 中ComboBox 绑定总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为iptables开放新的网络端口
- 下一篇: 【转载】2010年最全最新令人无语语录