if (dataGridView1.RowCount > 1)
            {
                SaveFileDialog saveFileDialog = new SaveFileDialog(); //Windows 窗体 SaveFileDialog 组件是一个预先配置的对话框。它与 Windows 使用的标准“保存文件”对话框相同                saveFileDialog.Filter = "Execl files (*.xls)|*.xls"; //获取或设置筛选器字符串,该字符串确定在 SaveFileDialog 中显示的文件类型                saveFileDialog.FilterIndex = 0; //索引                saveFileDialog.RestoreDirectory = true;//获取或设置一个值,该值使文件对话框将其当前目录还原为用户更改目录以搜索文件之前的初始值                saveFileDialog.CreatePrompt = true;//获取或设置一个值,该值指示如果用户指定一个不存在的文件,SaveFileDialog 是否提示用户以允许创建文件                saveFileDialog.Title = "Export Excel File To"; //获取或设置在文件对话框的标题栏中显示的文本
                saveFileDialog.ShowDialog();// 显示预置对话框
                Stream myStream;//提供字节序列的一般视图,命名空间:  System.IO                myStream = saveFileDialog.OpenFile();//为用户使用 SaveFileDialog 选定的文件名创建读/写文件流                StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(0));//用指定的编码及默认缓冲区大小,为指定的流初始化 StreamWriter 类的新实例                string str = "";                try
                {                    //写标题                    for (int i = 0; i < dataGridView1.ColumnCount; i++)
                    {                        if (i > 0)
                        {                            str = str + "\t";                        }                        str = 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.Dispose();
                    sw.Close();
                    myStream.Dispose();
                    myStream.Close();
                }
            }
            else
            {
                MessageBox.Show("没有数据可以导出!", "提示");
            }
1~~关闭对话框报错: myStream = saveFileDialog.OpenFile(); 超出数组界限
2~~保存完成后提示 未将对象引用到设置到对象的实例 ,但可以保存成功大家给帮忙看下哈

解决方案 »

  1.   

    你这边saveFileDialog.ShowDialog();要判断一下用户是确定还是取消吧,要是没指定文件名,你还打开什么呢
      

  2.   

    一般用法是if (DialogResult.OK==saveFileDialog.ShowDialog())
    {
       //表示用户正确指定了文件,
       //你的代码
    }
      

  3.   

    第一个问题:
    用if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
    代码
    }
    去掉saveFileDialog.ShowDialog();// 显示预置对话框第二个问题,描述的很不清楚。你可以试试这样
    finally
                    {
                        sw.Close();
                        myStream.Close();
                    }
                    return true;
    else//你的代码最后一个else
                {
                    return false;
                    MessageBox.Show("没有数据可以导出!", "提示");            }
            }
      

  4.   

    finally块那儿改成
    if(sw!=null)
    {
    sw.Dispose();
    }                  
    if(myStream!=null)

    myStream.Dispose();
    )                 
                       
      

  5.   

     tempStr +=dataGridView1.Rows[j].Cells[k].Value.ToString();
    ”未将对象引用到设置到对象的实例 “
      

  6.   

    tempStr += dataGridView1.Rows[j].Cells[k].Value.ToString();
    报错的原因应该是dataGridView1.Rows[j].Cells[k].Value为null,楼主可以断点试试
    你可以这样解决tempStr +=(dataGridView1.Rows[j].Cells[k].Value!=null? dataGridView1.Rows[j].Cells[k].Value.ToString():"");