最后50分,关于LISTBOX

amoxicillin1030 2003-08-19 03:55:24
我想在WINFORM中实现如下功能:
有两个LISTBOX,一个BUTTON,点击botton1使listbox1中的selectItem在listbox2中显示,并且从listbox1中移除这个selectItem。
其中LISTBOX1与数据库绑定了的。程序如下
this.listBox1.DataSource=ds.Tables["项目表"];
this.listBox1.DisplayMember="项目名称";
this.listBox1.ValueMember="项目名称";
private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
DataColumn dc;
DataTable dt=ds.Tables["项目表"];
dc =(DataColumn)dt.Columns["项目名称"];
DataRowView dr;
dr=(DataRowView)this.listBox1.SelectedItem;
select = dr.Row[dc].ToString();
}

private void button2_Click(object sender, System.EventArgs e)
{
listBox2.Items.Add(select);
listBox1.Items.Remove(select);

}
这个程序有两个问题:
1。点击BOTTON以后LISTBOX1中的selectItem并没有被移除
2。我想在listbox2中点击以后listbox1就失去焦点,也就是说整个winform中只能看到一个标志被选中的蓝色的框。
...全文
22 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
amoxicillin1030 2003-08-20
  • 打赏
  • 举报
回复
UP
amoxicillin1030 2003-08-20
  • 打赏
  • 举报
回复
((DtaView)listBox1.DataSource).RowFilter = "项目名称<>'" + select + "'";
指定的转换无效。。。
我刚学C#很多都不懂,麻烦大家写的详细点
amoxicillin1030 2003-08-20
  • 打赏
  • 举报
回复
建议你不要通过绑定数据源来给 listbox1赋值 ,添加 items 的那段自己写吧

items那段是直接从数据库获取的,随数据库里数据的改变而改变,自己怎么写啊-_-b
CSTerry 2003-08-19
  • 打赏
  • 举报
回复
哦,对不起,刚才没看仔细看这段:

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
DataColumn dc;
DataTable dt=ds.Tables["项目表"];
dc =(DataColumn)dt.Columns["项目名称"];
DataRowView dr;
dr=(DataRowView)this.listBox1.SelectedItem;
select = dr.Row[dc].ToString();
}

按我那种写法这段是不必要的


rouser 2003-08-19
  • 打赏
  • 举报
回复
不知道允許該數據源嘛?
如果你綁的是一個DataView作為數據源的(并且,“项目名称”字段是唯一的)
那么
private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
DataColumn dc;
DataTable dt=ds.Tables["项目表"];
dc =(DataColumn)dt.Columns["项目名称"];
DataRowView dr;
dr=(DataRowView)this.listBox1.SelectedItem;
select = dr.Row[dc].ToString();
}

private void button2_Click(object sender, System.EventArgs e)
{
listBox2.Items.Add(s);
((DtaView)listBox1.DataSource).RowFilter = "项目名称<>'" + select + "'";

}
CSTerry 2003-08-19
  • 打赏
  • 举报
回复
第二个方法是没什么问题的,最好还加上
private void listBox1_Enter(object sender, System.EventArgs e)
{
listBox2.SelectedItem=null;
}

当然有些判断要你自己写一下,我不能什么都写完了吧,比如在listBox里面如果没有数据项就会出现你说的情况
CSTerry 2003-08-19
  • 打赏
  • 举报
回复
建议你不要通过绑定数据源来给 listbox1赋值 ,添加 items 的那段自己写吧

另外:在事件

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
DataColumn dc;
DataTable dt=ds.Tables["项目表"];
dc =(DataColumn)dt.Columns["项目名称"];
DataRowView dr;
dr=(DataRowView)this.listBox1.SelectedItem;
select = dr.Row[dc].ToString();
}

里你又重新绑定了数据源,所以会造成listBox1中的项目无法移出的现象
amoxicillin1030 2003-08-19
  • 打赏
  • 举报
回复
未将对象引用设置到对象的实例

这是第二个问题的错误提示
amoxicillin1030 2003-08-19
  • 打赏
  • 举报
回复
CSTerry(Terry)
第一个问题
按照你的代码运行后出现异常,如下:
未处理的“System.ArgumentException”类型的异常出现在 system.windows.forms.dll 中。

其他信息: 在设置 DataSource 属性之后,无法修改 Items 集合。
CSTerry 2003-08-19
  • 打赏
  • 举报
回复
第二个问题可以这样解决


private void listBox2_Enter(object sender, System.EventArgs e)
{
listBox1.SelectedItem=null;
}

全部解决,给分吧
CSTerry 2003-08-19
  • 打赏
  • 举报
回复
这样可以解决第一个问题

listBox2.Items.Add(listBox1.SelectedItem);
listBox1.Items.Remove(listBox1.SelectedItem);
CSTerry 2003-08-19
  • 打赏
  • 举报
回复
在listbox2中点击以后listbox1肯定失去焦点了嘛
amoxicillin1030 2003-08-19
  • 打赏
  • 举报
回复
UP

110,535

社区成员

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

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

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