昨天,我就Listview控件中数据添加时出现了一些问题,具体问题记载详情看这篇博文:http://blog.csdn.net/oversea_zone/article/details/59112700

昨天我一直尝试在解决这个问题,但无果,在朋友的提醒下,我得到了一个新思路,那就是:存储传进来的项Lv可能存有多个值,也就是说:程序将我前几次点击的值一一存储进了Lv这个ListviewItem对象中,从而导致在进行对比时,出现紊乱的情况。

于是就这个问题,我在循环体的两个部分中添加了一句代码,即:Lv=null;意指无论是不是重复项,在处理完后都要讲其清空以便存储下一个传进来的对象。

可是,还是没能够解决问题,仍然出现了数据重复。

今天,我决定重新来解决这个问题。在代码的调试运行中,我发现一个问题,那就是:列表框中已经存在两项主键分别为79和80,当我再次传进80这个项时,系统是默认先将80跟79进行对比,发现不相等即将这个重复项添加了进来。

让我们再看看这段还未修改的代码:

   private void GeometrySelcted(object sender, EventArgs e) //填写申报信息代码 第6步:事件处理程序
               frme = (subEventArgs)e;
               ListViewItem lv = new ListViewItem();
               soGeoPoint point = (soGeoPoint)frme.subrecordset.GetGeometry();
               lv.SubItems[0].Text = frme.subrecordset.GetID().ToString();
               lv.SubItems.Add(point.x.ToString());
               lv.SubItems.Add(point.y.ToString());
               //根据Listview控件的项数处理不同程序
               if (foruser.lvInformations.Items.Count >= 1 && foruser.lvInformations.Items.Count <=3)
                   for (int i = 0; i < foruser.lvInformations.Items.Count; i++)
                       if (lv.SubItems[0].Text == foruser.lvInformations.Items[i].SubItems[0].Text)
                           foruser.tbOthers.Text = "不可以添加,且当前有" + foruser.lvInformations.Items.Count + "项";
                       else if (lv.SubItems[0].Text != foruser.lvInformations.Items[i].SubItems[0].Text)
                           foruser.tbOthers.Text = "可以添加,且当前有" + foruser.lvInformations.Items.Count + "项";
                           foruser.lvInformations.Items.Add(lv);
               else if (foruser.lvInformations.Items.Count > 3)
                   //如果超过四项则取消订阅事件,并弹出相应的消息提示
                   this.axSupermap1GeometrySelected -= GeometrySelcted;
                   MessageBox.Show("路灯次数超过限制!一个账号最多只能选择四个故障路灯噢:)","提示");
               else if(foruser.lvInformations.Items.Count==0)
                   foruser.lvInformations.Items.Add(lv);

仔细阅读程序,你会发现一个很明显的问题,那就是:

程序没有将列表框所有项比较完毕就做出了决策!换句话来说:假设列表框中已经存在A、B两项,当你试图把B再次添加进来的时候,程序先将当前传进来的B和A进行对比,发现不相等即将B加入,直接无视了列表框的第二项即B项的存在。

回顾整个流程,我发现我的整体思路是对的,即按照项的不同处理不同的程序,但真正的问题是出在循环体那一部分。

那好,我们现在的问题就是:如何使传进来的项和列表框中存在的每一项进行比较之后程序才做出相应的应答?

于是基于这个问题,我的解决思路是:将整个判断分为两部分,并以两个bool类型的值来做标记。一个命名为:same,用于反映项之间的相等状况;另一个命名为:different,用于反映项之间不相等的状况。循环结束后,判断两个标记值的值,从而得知该项是否为重复项。

具体思路如下图:

以下是代码:

  //根据Listview控件的项数处理不同程序
               if (foruser.lvInformations.Items.Count >= 1 && foruser.lvInformations.Items.Count <=3)
                   #region 未修改部分
                   for (int i = 0; i < foruser.lvInformations.Items.Count; i++)
                       if (lv.SubItems[0].Text == foruser.lvInformations.Items[i].SubItems[0].Text)
                           same = true;;
                   #endregion
                       else if (lv.SubItems[0].Text != foruser.lvInformations.Items[i].SubItems[0].Text)
                           different = false;
                   if (same == false && different == false)
                       foruser.lvInformations.Items.Add(lv);
                       lv = null;
                       MessageBox.Show("已存在此点,请重新选择!","提示");
               else if (foruser.lvInformations.Items.Count > 3)
                   //如果超过四项则取消订阅事件,并弹出相应的消息提示
                   #region
                   this.axSupermap1GeometrySelected -= GeometrySelcted;
                   MessageBox.Show("路灯次数超过限制!一个账号最多只能选择四个故障路灯噢:)","提示");
                   #endregion
               else if(foruser.lvInformations.Items.Count==0)
                   foruser.lvInformations.Items.Add(lv);
                   lv = null;
                    昨天,我就Listview控件中数据添加时出现了一些问题,具体问题记载详情看这篇博文:http://blog.csdn.net/oversea_zone/article/details/59112700昨天我一直尝试在解决这个问题,但无果,在朋友的提醒下,我得到了一个新思路,那就是:存储传进来的项Lv可能存有多个值,也就是说:程序将我前几次点击的值一一存储进了Lv这个ListviewI
				
private void button1_Click_1(object sender, EventArgs e) 方法1(交错数组,简单说是数组的数组) string[][] xxx = new string[10][]; xxx[0] = new string[] { "1", "2", "3" ,"4"};
1、先声明一个ListViewItem,ListViewItem item = new ListViewItem(); 2、添加第一列数据,item.Text = "第1列数据"; 3、依次添加后面列的数据: item.SubItems.Add(" 第2列"); item.SubItems.Add(" 第3列"); ..... (此处可以用循... string[] row1 = { "s1", "s2", "s3" }; listView1.Items.Add("Column1Text").SubItems.AddRange(row1); 第二种方式 ListViewItem item... 向item中添加其下的listview 可以对listview进行增删改操作 对listview中任意一个item的子集中的listview中的item对象进行增删改操作 前端代码 <Window x:Class="ListviewInItemAddList.MainWindow" xml...
好的,我可以回答这个问题。首先,在 Android Studio 中,我们需要在布局文件中添加 ListView 控件,然后在代码中设置适配器来显示数据。以下是详细的设计过程和代码: 1. 在布局文件中添加 ListView 控件: <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" /> 2. 在代码中设置适配器: ListView listView = findViewById(R.id.list_view); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); listView.setAdapter(adapter); 其中,data 是一个包含数据的字符串数组。 3. 在代码添加数据: String[] data = {"数据1", "数据2", "数据3"}; 这样,ListView 控件就可以显示出数据列表了。 希望我的回答能够帮到你。