Combobox 小结

首先声明,我这篇小结的数据源为 DataTable (IListSource数据源),文章内容很浅显,仅为个人或者初学者使用,。

如果各位大牛有补充的,小弟感激不进!~~~

 

首先,看几个属性:

  SelectedIndex 已重写。获取或设置指定当前选定项的索引。
  SelectedItem 获取或设置 ComboBox 中当前选定的项。
  SelectedText 获取或设置 ComboBox 的可编辑部分中选定的文本。
  SelectedValue  获取或设置由 ValueMember 属性指定的成员属性的值。(从 ListControl 继承。)
  SelectionLength 获取或设置组合框可编辑部分中选定的字符数。
  SelectionStart 获取或设置组合框中选定文本的起始索引。
   Text         已重写。获取或设置与此控件关联的文本。

 

文章主要是在这几个属性上面做文章。

1.首先为ComboBox绑定数据源DataTable.

1 DataSet ds = new WMS.BLL.B_BasicParaBLL().GetAllList();
2 comboBox1.DisplayMember = "ParaName";
3 comboBox1.ValueMember = "ParaId";
4 comboBox1.DataSource = ds.Tables[0];

2.数据库结构:

/****** 对象:  Table [dbo].[B_BasicPara]    脚本日期: 12/13/2010 16:34:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[B_BasicPara](
	[ParaId] [int] IDENTITY(1,1) NOT NULL,
	[ParaName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
	[ParaValue] [nvarchar](200) COLLATE Chinese_PRC_CI_AS NULL,
	[IsValid] [bit] NULL CONSTRAINT [DF_B_BasicPara_IsValid]  DEFAULT (1),
 CONSTRAINT [PK_B_BasicPara] PRIMARY KEY CLUSTERED 
(
	[ParaId] ASC
) ON [PRIMARY]
) ON [PRIMARY]

GO
EXEC dbo.sp_addextendedproperty @name=N'MS_Description', @value=N'参数编号' ,@level0type=N'USER', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'B_BasicPara', @level2type=N'COLUMN', @level2name=N'ParaId'

GO
EXEC dbo.sp_addextendedproperty @name=N'MS_Description', @value=N'参数名称' ,@level0type=N'USER', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'B_BasicPara', @level2type=N'COLUMN', @level2name=N'ParaName'

GO
EXEC dbo.sp_addextendedproperty @name=N'MS_Description', @value=N'参数内容' ,@level0type=N'USER', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'B_BasicPara', @level2type=N'COLUMN', @level2name=N'ParaValue'

GO
EXEC dbo.sp_addextendedproperty @name=N'MS_Description', @value=N'是否可用' ,@level0type=N'USER', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'B_BasicPara', @level2type=N'COLUMN', @level2name=N'IsValid'

 

 

 

数据,自己填充。。。

3.确定ComboBox中每一行的对象是到底是什么类型。

Debug.WriteLine("Item Type:" + comboBox1.SelectedItem.GetType());

 

或者

Debug.WriteLine("Item Type:" + comboBox1.SelectedItem.ToString());

 

4.现在可以看看自己所选对象的内容了。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    Debug.WriteLine("");
    Debug.WriteLine("=========================================");
    Debug.WriteLine("SelectedIndex:"+comboBox1.SelectedIndex);
    Debug.WriteLine("SelectedText:"+comboBox1.SelectedText);
    Debug.WriteLine("SelectedValue:"+comboBox1.SelectedValue.ToString());
    Debug.WriteLine("Text:"+comboBox1.Text);
    Debug.WriteLine("ItemType:"+comboBox1.SelectedItem.GetType());
    DataRowViewdrv=comboBox1.SelectedItemasDataRowView;
    Debug.WriteLine("ItemsCount:"+drv.Row.ItemArray.Length);
    Debug.WriteLine(string.Format("ItemsData:0:{0}1:{1}2:{2}e:{3}",drv.Row[0],drv.Row[1],drv.Row[2],drv.Row[3]));
}

 

有没有发现,不管你选择哪一项,comboBox1.SelectedText 的值永远都是空?

5.马上给出原因

  还记得这SelectionStart 和 SelectionLength这两个属性吧。。。?

  这两个属性是用来操作ComboBox中选中的文本的,第一个是起始位置,第二个是选中的长度。

  给出代码:

comboBox1.SelectionStart = 0;
comboBox1.SelectionLength = comboBox1.Text.Length;

 

在执行

Debug.WriteLine("SelectedText:"+comboBox1.SelectedText);

之前先执行这两条语句,SelectedText就有值了(之前郁闷了快半小时,没有经验啊。。。)

6.给ComboBox赋值

利用

comboBox1.Text
comboBox1.SelectedValue
comboBox1.SelectedItem

 

这三个属性来改变ComboBox选择的项。

Text:根据本文中用到的数据库,只赋ParaName的值就可定位到你需要选择的项

SelectedValue:根据本文中用到的数据库,只赋ParaId的值就可定位到你需要选择的项

SelectedItem:由于我暂时没有找到如何把DataRow类型转换成DataRowView类型,故此功能无法测试。(我提供个方案,自己写个ListItem类,有两个属性value,text,重载toString方法,输出Text值。然后添加许多listItem进ComboBox,这样可以通过ListItem定位到要选择的项了)

为什么不用SelectedText?

如果给SelectedText赋值,它其实是ComboBox.Text = SelectedText+ComboBox.Text, 并且没有选择的效果。这个属性有点迷惑人,其实就是TextBox的SelectedText属性。

7.小结一下。。。。。

之前用ComboBox总是提心吊胆,每次用都要上网查下这东西是怎么回事~~~这次做了个小小的试验,明白了它的一些属性是咋回事~~~嘘。。。。。

 

8.欢迎各位大牛指正和补充~~~

posted @ 2010-12-13 17:13  哑吧湖大水怪  阅读(785)  评论(0编辑  收藏  举报