2015-01-22 4 views
0
public void SaveAs() 
    { 
     if(dataGridView1.ColumnCount>=2) 
     { 
     SaveFileDialog saveFileDialog = new SaveFileDialog(); 
     saveFileDialog.Filter = "Excel files (*.xls)|*.xls"; 
     saveFileDialog.FilterIndex = 0; 
     saveFileDialog.RestoreDirectory = true; 
     saveFileDialog.CreatePrompt = true; 
     saveFileDialog.Title = "Export Excel File To"; 
     saveFileDialog.ShowDialog(); 

     Stream myStream; 

     myStream = saveFileDialog.OpenFile(); 
     StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0)); 
     string str = ""; 
     try 
     { 
      for (int i = 0; i < dataGridView1.ColumnCount; i++) 
      { 
       if (i > 0) 
       { 
        str += "\t"; 
       } 
       str += dataGridView1.Columns[i].HeaderText; 
      } 
      sw.WriteLine(str); 
      for (int j = 0; j < dataGridView1.Rows.Count; j++) 
      { 
       string tempStr = ""; 
       for (int k = 0; k < dataGridView1.Columns.Count; k++) 
       { 
        if (k > 0) 
        { 
         tempStr += "\t"; 
        } 
        tempStr += dataGridView1.Rows[j].Cells[k].Value.ToString(); 
       } 
       sw.WriteLine(tempStr); 
      } 
      sw.Close(); 
      myStream.Close(); 
     } 
     catch (Exception e) 
     { 
      // MessageBox.Show(e.ToString()); 
     } 
     finally 
     { 
      sw.Close(); 
      myStream.Close(); 
     } 

    } 
     else 
      MessageBox.Show("No data to save", "OK", 
MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk); 
    }  

Когда я открываю спасительное окно и я решил не экономить DataGridView1, нажав Cancel У меня есть ошибка Index was outside the bounds of the array. в myStream = saveFileDialog.OpenFile();Как обрабатывать результат в SaveFileDialog

Я не знаю, что здесь не так.

ответ

2

Ваш код виновника здесь:

saveFileDialog.ShowDialog(); 
Stream myStream; 
myStream = saveFileDialog.OpenFile(); 

Это должно быть, как, например:

if (saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { 
    // code here for user pressing OK instead of the 'X' or 'Cancel' 
    Stream myStream = saveFileDialog.OpenFile(); 
} 

Без этой проверки, если закрыть диалоговое окно (с помощью «х») или нажмите кнопку Отмена, ваши saveFileDialog имеет несколько «пустых» значений, которые вы пытаетесь и ссылаетесь (что дает вам ошибку).

+0

Большое спасибо! Это было действительно полезно. –

2

Функция ShowDialog() возвращает DialogResult, чтобы определить, какие действия были предприняты. Перед тем, как продолжить, просто проверьте возвращаемое значение. Например:

if(saveFileDialog.ShowDialog() == DialogResult.Cancel) 
{ 
    //do something else here or just return 
    return; 
} 
+0

Спасибо вам большое! Действительно быстрый ответ :) –

Смежные вопросы