閱讀: 120 評論: 0 做者: blackcore 發表於 2009-11-20 14:44 原文連接html
1. DataTablewindows
用DataTable直接綁定,只須要設置DataSource、DisplayMember、ValueMember三個屬性便可。ide
Code
this.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綁定後默認顯示第一項,但須要一項提示性選項,我沒有找到什麼好方法實現了。this
上網看一些人用ComboBox.SelectedIndex = -1或設置ComboBox.Text或初始化設置ComboBox.Items一個項爲初始項或設置ComboBox.DropDownStyle,但我這裏都沒達到效果。spa
本應實現效果A,但以上只能實現B效果,因此以上不符合要求。.net
效果A 效果Bcode
2. ComboBox.Items.Addorm
一開始使用時,覺得像Asp.net那樣有ListItem屬性可使用,但Items只有幾個特別簡單的屬性,還好Add(object item),因此就只能在object這裏做文章了。htm
因此就把要綁定的item新new 了一個對象,再重寫ToString(),如是乎就能夠了。
由於在整個頁面中,有不少相似的ComboBox控件,因此就小小的抽象了一下,而後就能夠便捷的實現效果B了。具體實現方式以下:
Code
using System.Data;
using System.Windows.Forms;
namespace BlackCore.App.Method
{
//抽象類 DataBindControls 引入抽象方法 dataBindComboBox(……)
public abstract class DataBindControls
{
///
/// 綁定ComboBox
///
///
ComboBox Control
///
是否爲此控件插入一個默認選項且默認選中
///
須要綁定的DataTable
///
顯示文字(DisplayMember)
///
ValueMember
public abstract void dataBindComboBox(ComboBox cmb, bool isInsertDefaultItem, DataTable dt, string selectedText, string selectedValue);
}
}
實現抽象便可
Code
using 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的綁定
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;
}
本人初學WinForm開發,以上內容是我的整理以便有需而用,其如有誤,煩請幫忙指點更正,衷心感謝!BlackCore敬上!
發表評論
新聞頻道:MyLatch:社交化的求職網站
推薦連接:Windows 7專題發佈
網站導航:博客園首頁 我的主頁 新聞 社區 博問 閃存 知識庫