0

こんにちはみんな私はc#に不慣れで、データグリッドビューを使用してテキストエディタプログラムを作成していました。問題は、データグリッドに対してテキストファイルを開いたときに、[保存]を押すと、「インデックスが配列の境界外にありました」というエラーが表示されることです。以下にコードを含めました。どんな提案も私にとって大きな助けになります。以下にコードを含めました。

         // edit file button
                dataGridView1.Columns.Add("colname", "Question");
                dataGridView1.Columns.Add("colname", "Answer 1");
                dataGridView1.Columns.Add("colname", "Answer 2");
                dataGridView1.Columns.Add("colname", "Answer 3");
                dataGridView1.Columns.Add("colname", "Answer 4");
                dataGridView1.Columns.Add("colname", "Correct Answer");
                dataGridView1.Columns[5].ReadOnly = true;
                dataGridView1.Columns[5].DefaultCellStyle.BackColor = Color.DimGray;
                dataGridView1.AllowUserToAddRows = true;


                StreamReader sr = new StreamReader(fName);
                string Contents = sr.ReadToEnd();
                string[] strArray = { Contents };

                for (int r = 0; r <= dataGridView1.Rows.Count - 1; r++)
                {
                    for (int c = 0; c <= dataGridView1.Columns.Count - 1; c++)
                    {

                        dataGridView1.Rows.Add(strArray[r].Split('|')); //getting the error here
                    }

                }

      //save button
    private void button2_Click(object sender, EventArgs e)
    {
        //dataGridView1.AllowUserToAddRows = false;
        if (dataGridView1.Visible)
        {

            string fName = "C:\\Documents and Settings\\" + txtFileName.Text + ".txt";                
            System.IO.StreamWriter file = new System.IO.StreamWriter(fName);
            string sLine = "";

            for (int r = 0; r <= dataGridView1.Rows.Count - 1; r++)
            {
                for (int c = 0; c <= dataGridView1.Columns.Count - 1; c++)
                {
                    sLine = sLine + dataGridView1.Rows[r].Cells[c].Value;
                    if (c != dataGridView1.Columns.Count - 1)
                    {
                        sLine = sLine + "|";
                    }
                }
                file.WriteLine(sLine);
                sLine = "";
            }
            file.Close();
            System.Windows.Forms.MessageBox.Show("Save Complete.", "Program Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
            dataGridView1.DataSource = "";
            dataGridView1.Visible = false;
        }
        else
        {
            string cap = "Confirmation";
            string message = "Nothing to save";
            MessageBoxButtons Btn2 = MessageBoxButtons.OK;    
            MessageBox.Show(message, cap, Btn2);
        }            
    } 

助けてくれてありがとう

4

1 に答える 1

0

最初はdataGridView1.Rows.Countがあります

ループ内で、このdataGridView1.Rows.Addを実行します。これにより、dataGridView1.Rows.Countが毎回1ずつ増加します。

したがって、処理後にループに戻ります

try declaring int gridRowcount = dataGridView1.Rows.Count;

and then replace (int r = 0; r <= dataGridView1.Rows.Count - 1; r++)
for (int r = 0; r <= gridRowcount - 1; r++) and try

推測するだけ

于 2013-01-22T01:51:15.737 に答える