1

将尝试仅发布相关代码,因为我的程序已经很大了。基本上,该程序将客户信息添加到数组列表结构中。我的存储、保存和文件加载工作完美无缺,但是当我试图显示数据时,我遇到了异常。

大多数主要代码都在一个与表单分开的类上,这个特殊的调用来自“frmViewRecords”。

public void ViewData(int currentRecord)
    {
        string fn = ((custDetails)datalist[currentRecord]).firstName;

        frmViewRecords viewRecords = new frmViewRecords();
        viewRecords.WriteData(fn);
    }

上面的代码是导致异常的原因,但下面的消息框代码可以正常工作。

public void LoadData()
    {
        bool fileLoaded = false;

        //Load the database
        try
        {
            FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); //Create the filestream
            try
            {
                BinaryFormatter bf = new BinaryFormatter(); //New binary formatter for deserialization
                datalist = (ArrayList)bf.Deserialize(fs);
                fileLoaded = true; //Update the fileLoaded bool so that it doesn't open the file dialog instance
                recordCount = datalist.Count;
                MessageBox.Show("" + filename + " loaded successfully."); //Inform the user that the file was automatically loaded
                MessageBox.Show("Test: " + ((custDetails)datalist[0]).firstName);
            }
            catch
            {
                MessageBox.Show("Could not de-serialise from " + filename, "FILE LOADING PROBLEM", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            fs.Close();
        }
        catch
        {
            if (MessageBox.Show("File isn't in the right location, this is normal if a dataset does not yet exist.\n\n If the file exists elsewhere click no and you will be prompted to find the database file, else click yes to create a default file.", "FILE LOADING PROBLEM", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
            {
                fileLoaded = true;
                CreateDefaultData();
            }
        }

我试过'string fn = ((custDetails)datalist[0]).firstName;' 以确保它不是导致问题的变量,并且异常仍然发生。我几乎没有想法。问题不能与结构或数组列表定义有关,因为 LoadData() 中的消息框可以正常工作并输出正确的信息。我尝试将消息框移动到 ViewData 方法,这也开始给出异常,所以我只能假设我的方法有问题?

这些方法位于“MainClass.cs”上,下面是我从 frmViewRecords 调用该方法的方式:

MainClass mainClass = new MainClass();
int currentRecord = 0;

private void LoadData()
    {
        mainClass.ViewData(currentRecord);
    }

值得一提的是,以前,我直接从 frmViewRecords 调用数据,如下所示:

txtFirstName.Text = ((MainClass.custDetails)mainClass.datalist[currentRecord].firstName;

但是在消息框提示起作用时遇到相同的异常后,我将其重写为上面的内容,但仍然遇到问题,所以我不知道是什么原因造成的。

4

1 回答 1

0

中没有项目datalistrecordCount中的值可能LoadData也为零。试试这个:

if(datalist.Count != 0) { /* Get the current record */ }
于 2012-11-27T14:06:21.750 回答