你选中的是最后一行。但随之你又将它删除。listBox的SelectIndex已经没有了。
删除后向上移一项,再绑定(仅最后一项时。)
所以报错。不知是不是这样。
删除后向上移一项,再绑定(仅最后一项时。)
所以报错。不知是不是这样。
解决方案 »
- 关于 sql程序(sql2005)发布运行、怎样可以实现在别的机器上也能运行
- C#.net中的虚方法(virtual)的问题(基础概念)
- 关于数据库的问题 谢谢
- 求Tcp/IP发送大数据思路
- 一个非常奇怪的有关“未将对象引用设置到对象的实例”错误的问题
- 请问.net SDK 和 .net framework 和 可再分发包 有什么区别?谢谢
- com问题
- 如何设置C#TextBox只能输入4-6个字符
- 如何用C#编程改变一个excel文件中的文本类型“2分30秒”到纯秒:“160”?
- C#.NET的WebForm中,如何实现无级分类,听说可以使用递归算法,不知道怎么用?急用,谢谢。
- 请教:如何用代码设置 DataGrid 指定的具体单元格的宽度
- 关于远程调用非常奇怪的一个问题
to : xinshaw(清瘦卫郎)错误的断点在:下面的最后一个符号 “}”
问题是错的没有什么理由!!!static void Main()
{
Application.Run(new Form1());
}
你只需要在List中添加一项,或删除选定项即可
{
myListData.Remove(listBox1.SelectedItem);
listBox1.DataSource=null;
listBox1.DataSource=myListData;
listBox1.DisplayMember="strTXT";
listBox1.ValueMember="strVAL"; //添加if语句,重新设置SelectedIndex值
if (listBox1.SelectedIndex != 0) listBox1.SelectedIndex=0;
}
你只需要在List中添加一项,或删除选定项即可"我要的是每项的两个值,,所以才采用数据源绑定
to "BillKang(寂寞惯了)"我试过了,不行的,我直接用 SelectedIndex = -1; 试过也不行;;;
我甚至 : listData ld=(listData)listBox1.SelectedItem;
listBox1.DataBindings.Clear();
listBox1.DataSource=null;
myListData.Remove(ld);
listBox1.DataSource=null;
listBox1.DataSource=myListData;
listBox1.DisplayMember="strTXT";
listBox1.ValueMember="strVAL";
把listBox1和dataSource全部断开,再在DataSource中去移除数据,
然后再绑定。从理论上讲 此时 listBox1 绑定的是一个新的数据源了。
可是也不行!真纳闷!!!!!只有在两个项以上删除最后一项才出现错误,,,是否是常见的 “临界值 ”值班错误的问题???
myListData.Remove(listBox1.SelectedItem);
的前面试试
但是,你的程序还有其它问题,比如删除操作中的remove方法。
"我试过了,按上面我的方法(将If语句提前),可以解决你的这个问题。"
这样是不会发生错误,可是却不是 删除 最后的那笔记录了!!!
而每次删除的都是 第一笔记录!我加上 条件 if (myListData.Count>0 && listBox1.SelectedIndex >=0 ) 再执行删除也不行。。
int i = this.listBox1.SelectedIndex;
this.listBox1.SelectedIndex = 0;
myListData.RemoveAt(i);
listBox1.DataSource=null;
listBox1.DataSource=myListData;
listBox1.DisplayMember="strTXT";
listBox1.ValueMember="strVAL";
了!!! int i =listBox1.SelectedIndex;
listData ld=(listData)listBox1.SelectedItem;
if (i==myListData.Count-1)
listBox1.SelectedIndex=myListData.Count-2;
myListData.Remove(ld);
listBox1.DataSource=null;
listBox1.DataSource=myListData;
listBox1.DisplayMember="strTXT";
listBox1.ValueMember="strVAL";就没有问题,而且还很符合删除后的记录移动。
只是 listBox1 在用 listBox.DataSource =null;
之后再重新绑定,按道理上讲 就不应该出现这样的错误。。
是否listBox1和一个数据源绑定之后,背后还有什么机制
哪位给予指点???
我稍微改了一点代码实现你想要的功能,绕过这个bug private void setListDataSource()
{
ArrayList lvArrayList = new ArrayList();
lock (myListData.SyncRoot)
{
foreach (Object item in myListData)
{
lvArrayList.Add(item);
}
}
listBox1.DataSource = lvArrayList;
listBox1.DisplayMember = "strTXT";
listBox1.ValueMember = "strVAL";
}
private void btnADD_Click(object sender, System.EventArgs e)
{
myListData.Add(new listData(textBox1.Text, "VALUE"));
setListDataSource();
}
private void btnDEL_Click(object sender, System.EventArgs e)
{
myListData.Remove(listBox1.SelectedItem);
setListDataSource();
}
看样子还是 microsoft 的 bug,
让咱学到东西了!!!
重新绑定,也就是listBox1 应该相当 第一此绑定,也就不应该出现改错误!
但我弄不明白其中的缘由,,,多谢 longx 赐教!!!
下周结贴!
欢迎试用ASP.NET大文件上传组件(AspnetUpload 1.0 Release & 无刷新进度条)
http://bestcomy.europe.webmatrixhosting.net
----------------------------------------------------------------------
{
}