Pregunta

Estoy intentando desplazarse a través de una base de datos de nombres de álbumes usando ListView. Al principio, cuando selecciono un álbum, _SelectedIndexChanged devuelve el álbum correspondiente; sin embargo, en los intentos posteriores para seleccionar un álbum, ListView devuelve un System.ArgumentOutOfRangeException - InvalidArgument = Valor de '0' no es válido para el 'índice'. Podría alguien por favor me guiarlo en la dirección correcta en cuanto a qué se puede hacer para evitar este error?

private void ScrollThroughAlbums()
    {
      string selectStatement = "SELECT * FROM Albums ORDER BY Artist";
      OleDbCommand selectCommand = new OleDbCommand(selectStatement, oleDatabaseConnectionString);
      OleDbDataReader myReader = selectCommand.ExecuteReader();
      ColumnHeader columnHeader1 = new ColumnHeader();
      ColumnHeader columnHeader2 = new ColumnHeader();
      ColumnHeader columnHeader3 = new ColumnHeader();

      columnHeader1.Text = "Album";
      columnHeader2.Text = "Artist";
      columnHeader3.Text = "Tracks";

      listView1.Columns.Add(columnHeader1);
      listView1.Columns.Add(columnHeader2);
      listView1.Columns.Add(columnHeader3);
      listView1.Columns[0].Width=130;
      listView1.Columns[1].Width=130;

      listView1.View = View.Details;
      listView1.AllowColumnReorder=true;
      listView1.FullRowSelect=true;
      listView1.GridLines=true;
      listView1.MultiSelect = false;
      listView1.Sorting= SortOrder.Ascending;

      while (myReader.Read())
      {
         string frontCoverXML = myReader.GetString(3).ToString();
         string Artist = myReader.GetString(1).ToString();
         string Album = myReader.GetString(2).ToString();
         string TracksXML = myReader.GetString(4).ToString();
         ListViewItem item = new ListViewItem(new []{Album,Artist}); 
         listView1.Items.Add(item); 

        } myReader.NextResult();
        myReader.Close();
    }

   private void listView1_SelectedIndexChanged(object sender,EventArgs e)
   {
      ListView.SelectedListViewItemCollection album = this.listView1.SelectedItems;
      MessageBox.Show(album[0].ToString());
   }
¿Fue útil?

Solución

   private void listView1_SelectedIndexChanged(object sender,EventArgs e)
   {
      ListView.SelectedListViewItemCollection album = this.listView1.SelectedItems;
      if(album.Count>0)
         MessageBox.Show(album[0].ToString());
   }

Otros consejos

El error indica que el controlador de eventos disparó mientras no hubo elementos seleccionados para que su llamada al álbum [0] no tuvo éxito ya que no había elementos. comprobar para ver si la propiedad recuento de albumis mayor que cero antes de hacer estallar su cuadro de mensaje.

Se debe a que, detrás de las escenas, el evento de cambio de índice seleccionado se llama en realidad tres veces en el cambio de un elemento a otro. Primero se selecciona un tema, entonces no hay ningún elemento, continuación, el elemento B. Un recuento de los elementos indizados referencia se mantiene en cada etapa. En el paso intermedio del recuento índice es 0 y por lo tanto no hay nada que referencia en la comprobación de índice. Tratando de referirse a ella devuelve el error. Comprobación de los saltos de recuento que paso intermedio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top