在我的程序中,我用了一个RadioButtonList和一个DropDownList往Listbox中添加ITEM,然后根据这些ITEM做查询,然后还可以更改和删除ITEM,现在添加查询没问题,但是就是删除某个ITEM会出问题.具体问题是,我用上面2个控件添加ITEM的时候,要是同时出现VALUE一样的ITEM的话,我要是想删除后面的ITEM的话会发现删除的都是第一个同样VALUE的ITEM,举个例子:我现在添加了4个ITEM:A(VALUE),0(这个0是序号是第一个)、B,1、A,2、C,3现在我选择了序号2的A点删除结果确删除了序号0的A,结果变成了B,0、A,1、C,2。
    我把某段添加代码还有删除代码贴出来,大家帮我分析下是什么原因。
    RadioButtonList的添加代码如下,news_connection是RadioButtonList,sear_body是Listbox。    private void Button6_Click(object sender, System.EventArgs e)
{
string tmp_text="";
string tmp_value="";
tmp_text=this.news_connection.SelectedItem.Text.ToString()+"  ";
tmp_value=this.news_connection.SelectedItem.Value.ToString()+"   ";
this.sear_body.Items.Add(tmp_text);
this.sear_body.Items[this.sear_body.Items.Count-1].Value=tmp_value;
}    删除代码如下:
    private void Button2_Click(object sender, System.EventArgs e)
{
  if(this.sear_body.SelectedIndex!=-1)
    {

for(inti=0;i<this.sear_body.Items.Count;i++)
{
   if(this.sear_body.Items[i].Selected)
    {
this.sear_body.Items.RemoveAt(i);
i--;     }
}     }
    else
       {
this.sear_body.Items.Clear();
       }
}

解决方案 »

  1.   

    我测试了这个,也发现这个问题。我的感觉是,listbox在判断那个被选中的话,只是判断被选中的value,以value作为选中的判断条件。所以,你最好不要把item里的value值设置成相同的。
      

  2.   

    上周有事没能来,你说的那个我开始也想到了,但是我后来自己对程序做了修改,感觉似乎不是这么回事,似乎listbox在执行任何循环的时候就会出现这个问题.我是把删除代码那段改为固定删除某个序号的ITEM,比如3.修改的程序段如下:
         private void Button2_Click(object sender, System.EventArgs e)
    {
      if(this.sear_body.SelectedIndex!=-1)
        {
         if(this.sear_body.Items[i].Selected)
         {
           this.sear_body.Items.RemoveAt(3);
           
          }
    }    }
        else
           {
    this.sear_body.Items.Clear();
           }
    }
       我修改后做了测试,删除完全正常,并不会因为前后2个ITEM的VALUE一样而错删除前面的ITEM,然后我又把原来程序段的循环语句用其他来写,比如WHILE什么的,甚至我从序号0开始用IF来判断
    然后IF ELSE继续判断1,2,3,4,这样都会出现一开始的错删除同样VALUE的ITEM的情况.我就感觉似乎是listbox控件自己对循环的响应机制的问题,有哪个高手知道吗?能详细说下listbox控件吗?
      

  3.   

    ListBox在客户端生成的也就是HTML标记,而对于HTML的Select中,如果option的value相同只返回第一个
      

  4.   

    amandag(高歌)你仔细看下我在3楼的回复,按你说的VALUE相同的话只删除第一个的话,但是我后来在删除代码里直接指定了删除某行的,当我特别 加入了前后几个有相同VLAUE的ITEM,删除时却不会误删除,就只删除指定那行(我特别把指定那行的VLAUE在前面有重复)不会出现删除最前面那个的情况
      

  5.   

    完全同意amandag(高歌)的意见,三个星星毕竟不是盖的。
    to LZ:对于html下的标记,select有value和selectedIndex, 假如两个option的value相同,select的value只返回这个value,而selectedindex就只返回第一个等于此value的index,所以,在删除指定的value的时候,就删除第一个等于这个value的option。
    而你后面的试验,是你删除指定的index,这个select是不会搞错的,所以,你指定删除哪个,它就会删除哪个的。
      

  6.   

    dropdownlist生成的html页面,就是
    <select>
       <option value="1">1</option>
       .....
       ....
       <option value="n">n</option>
    </select>