إرجاع ListView InvalidArgument = قيمة "0" - خارج نطاق استثناء النطاق
-
25-09-2019 - |
سؤال
أحاول التمرير من خلال قاعدة بيانات لأسماء الألبوم باستخدام ListView. عندما أقوم في البداية بتحديد ألبوم ، يقوم _selectedIndexChanged بإرجاع الألبوم المناسب ؛ ومع ذلك ، في المحاولات اللاحقة لتحديد ألبوم ، تقوم ListView بإرجاع System.ArgumentOutOfRangeException - InvalidArgument = قيمة "0" غير صالحة لـ "الفهرس". هل يمكن لشخص ما توجيهني في الاتجاه الصحيح فيما يتعلق بما يمكن القيام به لتجنب هذا الخطأ؟
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());
}
المحلول
private void listView1_SelectedIndexChanged(object sender,EventArgs e)
{
ListView.SelectedListViewItemCollection album = this.listView1.SelectedItems;
if(album.Count>0)
MessageBox.Show(album[0].ToString());
}
نصائح أخرى
يشير الخطأ إلى أن معالج الحدث قد تم إطلاقه بينما لم يتم تحديد عناصر ، لذا فشلت مكالمتك إلى الألبوم [0] حيث لم تكن هناك عناصر. تحقق لمعرفة ما إذا كانت خاصية Count of Albumis أكبر من الصفر قبل ظهور مربع الرسائل الخاص بك.
ذلك لأنه ، خلف الكواليس ، يسمى حدث تغيير الفهرس المحدد ثلاث مرات في التبديل من عنصر إلى آخر. يتم تحديد العنصر الأول A ، ثم لا يوجد عنصر ، ثم البند B. يتم الحفاظ على عدد العناصر المفهرسة المشار إليها في كل مرحلة. في الخطوة المؤقتة ، يكون عدد الفهرس 0 ، وبالتالي لا يوجد شيء للإشارة إليه في فحص الفهرس. محاولة الرجوع إليها إرجاع الخطأ. التحقق من العد يتخطى تلك الخطوة المتوسطة.