我正在尝试使用ListView滚动浏览相册名称数据库。当我最初选择一个专辑时,_SelectedIndexChanged会返回相应的专辑;但是在随后的选择相册的尝试中,ListView返回System.ArgumentOutOfRangeException - InvalidArgument =值'0'对'index'无效。有人可以引导我朝正确的方向指导我可以做些什么来避免这个错误吗?
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());
}
答案 0 :(得分:2)
private void listView1_SelectedIndexChanged(object sender,EventArgs e)
{
ListView.SelectedListViewItemCollection album = this.listView1.SelectedItems;
if(album.Count>0)
MessageBox.Show(album[0].ToString());
}
答案 1 :(得分:1)
错误表示事件处理程序已触发但未选择任何项目,因此您对专辑[0]的调用失败,因为没有项目。在弹出消息框之前,检查专辑的计数属性是否大于零。
答案 2 :(得分:1)
这是因为,在幕后,所选索引更改事件实际上在从一个项目切换到另一个项目时被调用三次。选择第一个项目A,然后选择没有项目,然后选择项目B.在每个阶段保持所引用的索引项目的计数。在临时步骤中,索引计数为0,因此在索引检查中没有任何内容可供引用。试图引用它会返回错误。检查计数会跳过中间步骤。