Domanda

Sto tentando di scorrere attraverso un database dei nomi di album usando ListView. Quando ho inizialmente selezionare un album, _SelectedIndexChanged restituisce l'album appropriato; tuttavia in successivi tentativi di selezionare un album, ListView restituisce uno System.ArgumentOutOfRangeException - InvalidArgument = valore '0' non è valida per 'indice'. Qualcuno potrebbe me guidare nella giusta direzione, come a ciò che si può fare per evitare questo errore?

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());
   }
È stato utile?

Soluzione

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

Altri suggerimenti

L'errore indica il gestore di eventi sparato mentre non vi erano elementi selezionati in modo la chiamata all'album [0] non riuscita perché non c'erano elementi. controllare per vedere se la proprietà di conteggio albumis maggiore di zero prima di schioccare la vostra finestra di messaggio.

E 'perché, dietro le quinte, l'evento di modifica indice selezionato è in realtà chiamato tre volte nel passaggio da un elemento all'altro. Primo elemento A è scelto, quindi nessun elemento, quindi elemento B. Un conteggio degli elementi indicizzati riferimento è mantenuta in ogni fase. Nel passo intermedio il conteggio indice è 0 e quindi non c'è nulla per riferimento nel controllo dell'indice. Cercando di fare riferimento ad esso restituisce l'errore. Controllo dei cassonetti conteggio che passo centrale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top