首先声明,我这篇小结的数据源为 DataTable (IListSource数据源),文章内容很浅显,仅为个人或者初学者使用,。
如果各位大牛有补充的,小弟感激不进!~~~
首先,看几个属性:
SelectedIndex | 已重写。获取或设置指定当前选定项的索引。 | |
SelectedItem | 获取或设置 ComboBox 中当前选定的项。 | |
SelectedText | 获取或设置 ComboBox 的可编辑部分中选定的文本。 | |
SelectedValue | 获取或设置由 ValueMember 属性指定的成员属性的值。(从 ListControl 继承。) | |
SelectionLength | 获取或设置组合框可编辑部分中选定的字符数。 | |
SelectionStart | 获取或设置组合框中选定文本的起始索引。 |
Text | 已重写。获取或设置与此控件关联的文本。 |
文章主要是在这几个属性上面做文章。
1.首先为ComboBox绑定数据源DataTable.
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.欢迎各位大牛指正和补充~~~