日期:2014-05-18  浏览次数:20872 次

listview数据越界
public void FillLv()
{
this.listView1.Items.Clear();
sdr=this.ShowBookInformation();
while(sdr.Read())
{
ListViewItem item=new ListViewItem(sdr[0].ToString());
item.SubItems.Add(sdr[1].ToString());
item.SubItems.Add(sdr[2].ToString());
item.SubItems.Add(sdr[3].ToString());
item.SubItems.Add(sdr[4].ToString());

this.listView1.Items.Add(item);

}

}
在listview里面想通过点击选择项,将各列内容显示在文本框中,
private void listView1_Click(object sender, System.EventArgs e)
{

this.txtNumber.Text=this.listView1.SelectedItems[0].Text;
this.txttitle.Text=this.listView1.SelectedItems[1].Text;

}
运行提示:
指定的参数已超出有效值的范围。
应该怎么修改一下呢?


------解决方案--------------------
this.txttitle.Text=this.listView1.SelectedItems[1].Text; 
你这个是什么意思???同时选中了两个吗?
------解决方案--------------------
private void listView1_Click(object sender, System.EventArgs e) 


this.txtNumber.Text=this.listView1.SelectedItems[0].Text; 
this.txttitle.Text=this.listView1.SelectedItems[1].Text; 
//如果不是多选的话 SelectedItems[1].Text; 肯定越界了



------解决方案--------------------
哈,仔细想了一下,知道楼主的问题所有了。
1:是越界了,即[1]在没有多选的情况下是不可访问的,越界。
2:没有准确的理解SelectedChanged事件。
比如首先你选择Item 1,然后再选择Item 2。这个过程中会发生两次 SelectedChanged事件。首先是由选择1,变为选择空,然后再变为选择2!
所以你要加上一个判断:
if(listView1.SelectedItems.Count>0)
{
//..这里加上你对SelectedItems[0]的处理。
}

另外我怀疑你的SelectedItems[1]的意思是不是指:
listView1.SelectedItems[0].SubItems[0]这样的访问方式?呵呵。如果是的话,你就应该按我这样写。
------解决方案--------------------
探讨
this.txttitle.Text=this.listView1.SelectedItems[1].Text;
你这个是什么意思???同时选中了两个吗?