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;

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

解决方案 »

  1.   

    this.txttitle.Text=this.listView1.SelectedItems[1].Text; 
    你这个是什么意思???同时选中了两个吗?
      

  2.   

    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; 肯定越界了} 
      

  3.   

    this.listView1. MultiSelect=true;
    然后在多选的情况下,你写的才不会越界
      

  4.   

    哈,仔细想了一下,知道楼主的问题所有了。
    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]这样的访问方式?呵呵。如果是的话,你就应该按我这样写。
      

  5.   


    楼上正解,,如果你只选一行的话,索引应该是0,,如果你要选多行,还得设置this.listView1. MultiSelect=true;,,很简单,老板,结帐,,,
      

  6.   

    这个分析呵呵,如果我不是在IndexChanged事件中使用listView1.SelectedItems[0].SubItems[0],也出现同样的问题了?listView是设置的三列的,listView.SlectedItems[0].SubItem[2], 选中行的第三列,这个是什么原因啊。