日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

WinForm 中ComboBox 绑定总结

發(fā)布時(shí)間:2024/4/11 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinForm 中ComboBox 绑定总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?1.  DataTable

用DataTable直接綁定,只需要設(shè)置DataSource、DisplayMember、ValueMember三個(gè)屬性即可。

Code
this.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)方式如下:

Code
using?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)抽象即可?

Code
using?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的綁定

Code
DataBindControlsImplement?implement?=?new?BlackCore.App.Method.DataBindControlsImplement();

implement.dataBindComboBox(
this.searchCmbConsumeMarket,?true,?bllMarket.GetList("").Tables[0],?"Name",?"ID");

ComboBox的獲取?

Code
if?(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。