C#中的listview的一个问题

1:如图"加经验值"按钮被按后我想让所有人的经验值都为100我的做法是foreach(ListViewItemiinlistView1.Items){i.SubItems... 1:
如图

"加经验值"按钮被按后我想让所有人的经验值都为100
我的做法是
foreach(ListViewItem i in listView1.Items){ i.SubItems[3].Text = "10"; }
但注意到这里有一个数字3
要是以后我把 经验值这一栏移动一下 这里应该写的数字就不应该是3了

我想达到的效果是
i.SubItems["经验值"].Text = "10";
直接这样写好像不行
貌似只能先for循环columns找出"经验值"在哪一栏确定出数字
这种方法效率如何? 评价一下.

2:
i.SubItems 所属的类是 ListViewItem.ListViewSubItemCollection
它重载了运算符[]
Item[Int32] 获取或设置该集合内指定索引处的子项。 Item[String] 获取集合中具有指定键的项。
获取集合中具有指定键的项。这句话是什么意思能实现什么效果?ListViewItem.ListViewSubItemCollection的许多方法都提到键
如IndexOfKey removebykey等
键是指什么??
请给点例子说明这些方法使用以后的效果

3:
我使用MSDN2008 搜索 ListViewItem 类
只能找到一个ListViewItem类 但是这个ListViewItem类里面没有 SubItems属性(其实应该要有的!!!)
之后我又在ListViewItem后面输入.SubItems 就找到了SubItems属性
从该属性的页面 我找到一个超链接 点击该超链接 就回到了ListViewItem类
我发现前后2次的ListViewItem类的地址不一样{ms-help://MS.MSDNQTR.v90.chs/fxref_system.windows.forms/html/7b2a9964-d0fc-afee-0838-495793576452.htm 就是这些地址 是不一样的}
而且此次出现的ListViewItem类有SubItems属性了
这是在坑爹吗
有好办法解决?

基础悬赏粉50 视回答情况 追加一定分数
ms-help://MS.MSDNQTR.v90.chs/fxref_system.web.extensions/html/4130c3f5-5a02-42ef-d62b-ba1c09a3e330.htm
没有subitems属性

ms-help://MS.MSDNQTR.v90.chs/fxref_system.windows.forms/html/86658076-e705-894a-55c0-16907541a2ce.htm
有subitems属性

第一个可以直接通过MSDN找到 第二个不行
展开
 我来答
leiyangbdwk
2013-06-06 · TA获得超过3295个赞
知道大有可为答主
回答量:4975
采纳率:12%
帮助的人:4360万
展开全部
  1. 貌似没有直接根据列名来索引的方法,就你那种先查找位置的方法是比较好的。不然就使用datagridview好了。

  2. 所谓的键你就看做是下标好了。

  3. 把你说的没有这个属性的msdn的链接发出来看看。

追问
提问补充了 你再看看
顺便第二条你可以说得清楚一些吗
什么叫做当做下标
弄些例子演示一下
追答
麻烦你贴msdn官网的链接,你那个本地链接别人打不开。
连下标都不知道?数组的下标。
再看看哈希表的概念吧,就是键和值。
百度网友ce9f999
2013-06-06 · TA获得超过406个赞
知道小有建树答主
回答量:540
采纳率:100%
帮助的人:543万
展开全部
额,这个你理解错了一个概念
i.SubItems["经验值"].Text = "10";这一句可能不应该这么写
一般索引的键,是指这个对象的唯一属性,比如一个集合有三个对象,这三个对象在集合里面必须能区分出来,那区分出来的字段,就是这个键,即【】里面的string
显然,这个键,是所有subitems的每一项的Name属性的值,而不是Text的值。
追问
每一项的Name我也试着改过了 也不对
因为每一项的Name可以重复 这样的话显然不可能唯一标识
追答

那是因为你没有为Name赋值,不是所有都一样的,你断点看看你的那个Name属性是不是变成了“”

代码这么写,就是在动态加数据之前,给他赋值name属性

这个代码就是说明,根据Name可以访问的到

foreach (ListViewItem i in listView1.Items)
            {
                i.SubItems[2].Name = "名称";
                i.SubItems["名称"].Text = "10";
              
            }

怎样使他有name值,就是你在动态添加部分的工作了

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式