循环取checkedListBox所选的值出现问题,被折腾了一个早上……

tqwboy 2009-09-29 02:21:43

for (int indexChecked = checkedListBox1.Items.Count - 1; indexChecked >= 0; indexChecked--)
{
if (checkedListBox1.GetItemChecked(indexChecked))
{
MessageBox.Show(checkedListBox1.Text);
}
}


这是我循环取得checkedListBox的值的代码,但是出现一个问题:当被选中的项为一个的时候,结果正确。当选中的是多项的
时候,所有循环的结果却只有被循环访问到的第一个值。比如有两个被选中的选项,第一个为“交通”,第二个为“娱乐”,
因为我是倒着访问的,所以第一个显示结果是“娱乐”,等循环第二次访问的时候,结果还是“娱乐”而不是“交通”,这个
到底是怎么回事啊?

另外,我曾经尝试过
checkedListBox1.Items[indexChecked].ToString()
这样来取值,却得到“System.Data.DataRowView”这个不知所云的结果,这到底是怎么回事?难道跟我给checkedListBox绑定数据的方式有关?
checkedListBox的数据是我动态从数据库中取出来的,下面是我的数据绑定代码:


oleString = "select 名称 from 收支项目 where 项目类别 = '" + item + "'";
oleDataAdapter1 = new OleDbDataAdapter(oleString, form.oledbconn);

oleDataAdapter1.Fill(dataSet1, "收支项目");

checkedListBox1.DataSource = dataSet1.Tables["收支项目"];
checkedListBox1.DisplayMember = "名称";
...全文
315 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
alighten 2009-09-29
  • 打赏
  • 举报
回复
for (int i = 0; i < CheckBoxList1.Items.Count; i++)
{
if (this.CheckBoxList1.Items[i].Selected)
{
this.Label1.Text += this.CheckBoxList1.Items[i].Value;
}

}
tqwboy 2009-09-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 libinguest 的回复:]
引用 4 楼 tqwboy 的回复:
引用 3 楼 libinguest 的回复:
楼主:1楼的回答抱歉是错的.

弱弱的问一句,this.checkedListBox1.Items.Add();的参数该怎么写……我是个菜鸟,别笑话我……


this.checkedListBox1.Items.Add("first",false);
[/Quote]

非常感谢,果然是数据绑定有问题,难怪 .Net2.0取消了checkedListBox的DataSouce和DisplayMember这两个属性。果然不该强制使用淘汰的属性和方法的阿。

以下是我改好的代码:

oleString = "select 名称 from 收支项目 where 项目类别 = '" + item + "'";
oleDataAdapter1 = new OleDbDataAdapter(oleString, form.oledbconn);

oleDataAdapter1.Fill(dataSet1, "收支项目");

comm.CommandText = oleString;
comm.Connection = form.oledbconn;
dataReader = comm.ExecuteReader();

while (dataReader.Read())
{
checkedListBox1.Items.Add(dataReader.GetValue(0).ToString().Trim() , false);
}
dataReader.Close();
comm.Dispose();
lfzucc 2009-09-29
  • 打赏
  • 举报
回复

StringBuilder sb = new StringBuilder();

for (int i = 0; i < checkedListBox1.CheckedIndices.Count; i++)
{
sb.AppendLine (checkedListBox1.CheckedItems [i].ToString ());

}
MessageBox.Show(sb.ToString());
风之影子 2009-09-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tqwboy 的回复:]
引用 3 楼 libinguest 的回复:
楼主:1楼的回答抱歉是错的.

弱弱的问一句,this.checkedListBox1.Items.Add();的参数该怎么写……我是个菜鸟,别笑话我……
[/Quote]

this.checkedListBox1.Items.Add("first",false);
cadtian 2009-09-29
  • 打赏
  • 举报
回复
MessageBox.Show(checkedListBox1.Items[indexChecked].ToString());

貌似贴完了
wangan2008 2009-09-29
  • 打赏
  • 举报
回复

string box1 = "", box2 = "";
for (int j = 0; j < CheckBoxList1.Items.Count; j++)
{//房屋配置:
if (CheckBoxList1.Items[j].Selected == true)
box1 += CheckBoxList1.Items[j].Value + ",";
}
if (box1.EndsWith(","))
box1 = box1.Substring(0, box1.Length - 1);

up
tqwboy 2009-09-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 libinguest 的回复:]
楼主:1楼的回答抱歉是错的.


刚试了一下你所说的C# codefor (int indexChecked= checkedListBox1.Items.Count-1; indexChecked>=0; indexChecked--)
{if (checkedListBox1.GetItemChecked(indexChecked))
{
MessageBox.Show(checkedListBox1.Items[indexChecked].ToString());
}
}

没有问题.

问题应该出在你绑定数据源的时候,你试着把你的数据项通过
this.checkedListBox1.Items.Add();添加进去.
再用checkedListBox1.Items[indexChecked].ToString()就没有问题了.
试试
[/Quote]

弱弱的问一句,this.checkedListBox1.Items.Add();的参数该怎么写……我是个菜鸟,别笑话我……
风之影子 2009-09-29
  • 打赏
  • 举报
回复
楼主:1楼的回答抱歉是错的.


刚试了一下你所说的
for (int indexChecked = checkedListBox1.Items.Count - 1; indexChecked >= 0; indexChecked--)
{
if (checkedListBox1.GetItemChecked(indexChecked))
{
MessageBox.Show(checkedListBox1.Items[indexChecked].ToString());
}
}


没有问题.

问题应该出在你绑定数据源的时候,你试着把你的数据项通过
this.checkedListBox1.Items.Add();添加进去.
再用checkedListBox1.Items[indexChecked].ToString()就没有问题了.
试试
jacksonwj 2009-09-29
  • 打赏
  • 举报
回复
循环的时候可以将选中的值Add进一个List撒~~~
风之影子 2009-09-29
  • 打赏
  • 举报
回复
这样来取值,却得到“System.Data.DataRowView”这个不知所云的结果

查询时把你的checkedlistbox转换为checkbox

试着取值看看.

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧