解决方案 »

  1.   

    你导出的有些问题,用这个,我测试过:
      public static void DataGridViewToExcel(DataGridView dgv)
            {
                #region   验证可操作性            //申明保存对话框   
                SaveFileDialog dlg = new SaveFileDialog();
                //默然文件后缀   
                dlg.DefaultExt = "xls ";
                //文件后缀列表   
                dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";
                //默然路径是系统当前路径   
                dlg.InitialDirectory = Directory.GetCurrentDirectory();
                //打开保存对话框   
                if (dlg.ShowDialog() == DialogResult.Cancel) return;
                //返回文件路径   
                string fileNameString = dlg.FileName;
                //验证strFileName是否为空或值无效   
                if (fileNameString.Trim() == " ")
                { return; }
                //定义表格内数据的行数和列数   
                int rowscount = dgv.Rows.Count;
                int colscount = dgv.Columns.Count;
                //行数必须大于0   
                if (rowscount <= 0)
                {
                    MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //列数必须大于0   
                if (colscount <= 0)
                {
                    MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //行数不可以大于65536   
                if (rowscount > 65536)
                {
                    MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //列数不可以大于255   
                if (colscount > 255)
                {
                    MessageBox.Show("数据记录行数太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //验证以fileNameString命名的文件是否存在,如果存在删除它   
                FileInfo file = new FileInfo(fileNameString);
                if (file.Exists)
                {
                    try
                    {
                        file.Delete();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                }
                #endregion
                Microsoft.Office.Interop.Excel.Application objExcel = null;
                Microsoft.Office.Interop.Excel.Workbook objWorkbook = null;
                Microsoft.Office.Interop.Excel.Worksheet objsheet = null;
                try
                {
                    //申明对象   
                    objExcel = new Microsoft.Office.Interop.Excel.Application();
                    objWorkbook = objExcel.Workbooks.Add(Missing.Value);
                    objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet;
                    //设置EXCEL不可见   
                    objExcel.Visible = false;                //向Excel中写入表格的表头   
                    int displayColumnsCount = 1;
                    for (int i = 0; i <= dgv.ColumnCount - 1; i++)
                    {
                        if (dgv.Columns[i].Visible == true)
                        {
                            objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
                            displayColumnsCount++;
                        }
                    }
                    //设置进度条   
                    //tempProgressBar.Refresh();   
                    //tempProgressBar.Visible   =   true;   
                    //tempProgressBar.Minimum=1;   
                    //tempProgressBar.Maximum=dgv.RowCount;   
                    //tempProgressBar.Step=1;   
                    //向Excel中逐行逐列写入表格中的数据   
                    for (int row = 0; row <= dgv.RowCount - 1; row++)
                    {
                        //tempProgressBar.PerformStep();                       displayColumnsCount = 1;
                        for (int col = 0; col < colscount; col++)
                        {
                            if (dgv.Columns[col].Visible == true)
                            {
                                try
                                {
                                    objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
                                    displayColumnsCount++;
                                }
                                catch (Exception)
                                {                            }                        }
                        }
                    }
                    //隐藏进度条   
                    //tempProgressBar.Visible   =   false;   
                    //保存文件   
                    objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                            Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
                            Missing.Value, Missing.Value);
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                finally
                {
                    //关闭Excel应用   
                    if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);
                    if (objExcel.Workbooks != null) objExcel.Workbooks.Close();
                    if (objExcel != null) objExcel.Quit();                objsheet = null;
                    objWorkbook = null;
                    objExcel = null;
                }
                MessageBox.Show(fileNameString + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);        }  
      

  2.   


    还是老问题,我们的方法导出都是csv文件,后缀被改成了xls。用xls打开会有提示。导出的csv文件再用原来导入的方法会有问题,在conn.open();那行。csv文件导入到datagridview中方法,我不会啊求大神指教。下面是代码,有错的。 string ConnectionString;
                    string SQLString;
                    ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+path+";Extended Properties=\"Text;HDR=yes;FMT=Delimited\""; //注意是文件所在的文件夹,不是文件本身路径
                    SQLString = "Select * from 7.csv";
                    System.Data.OleDb.OleDbConnection ConnectionText = new System.Data.OleDb.OleDbConnection();
                    ConnectionText.ConnectionString = ConnectionString;
                    ConnectionText.Open();
                    System.Data.OleDb.OleDbDataAdapter AdapterText = new System.Data.OleDb.OleDbDataAdapter(SQLString, ConnectionText);
                    System.Data.DataSet DataSetText = new System.Data.DataSet("TextFiles");
                    AdapterText.Fill(DataSetText, "TextFile");
                                    DataTable tb = new DataTable();
                    foreach (DataGridViewColumn dgvc in dgv.Columns)
                    {
                        if (dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell))
                        {
                            DataColumn dc = new DataColumn();
                            dc.ColumnName = dgvc.DataPropertyName;
                            //dc.DataType = dgvc.ValueType;//若需要限制导入时的数据类型则取消注释,前提是DataGridView必须先绑定一个数据源那怕是空的DataTable
                            tb.Columns.Add(dc);
                        }
                    }
                   DataSet ds = new DataSet();
                   ds = (DataSet)dgv.DataSource;
                    //根据Excel的行逐一对上面构造的DataTable的列进行赋值
                    foreach (DataRow excelRow in ds.Tables[0].Rows)
                    {
                        int i = 0;
                        DataRow dr = tb.NewRow();
                        foreach (DataColumn dc in tb.Columns)
                        {
                            dr[dc] = excelRow[i];
                            i++;
                        }
                        tb.Rows.Add(dr);
                    }
                    //在DataGridView中显示导入的数据
                    dgv.Columns.Clear();
                    dgv.DataSource = tb;
      

  3.   


    用这个方式导入,如何?
      private void button4_Click(object sender, EventArgs e)
            {            dgv.DataSource = newOpenCSV("d:\\7.csv");
            }
            public DataTable newOpenCSV(string filePath)
            {
                //Encoding encoding = Common.GetType(filePath); //Encoding.ASCII;//
                DataTable dt = new DataTable();
                FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);            StreamReader sr = new StreamReader(fs, Encoding.Default);
                //StreamReader sr = new StreamReader(fs, encoding);
                //string fileContent = sr.ReadToEnd();
                //encoding = sr.CurrentEncoding;
                //记录每次读取的一行记录
                string strLine = "";
                //记录每行记录中的各字段内容
                string[] aryLine = null;
                string[] tableHead = null;
                //标示列数
                int columnCount = 0;
                //标示是否是读取的第一行
                bool IsFirst = true;
                //逐行读取CSV中的数据
                while ((strLine = sr.ReadLine()) != null)
                {
                    //strLine = Common.ConvertStringUTF8(strLine, encoding);
                    //strLine = Common.ConvertStringUTF8(strLine);                if (IsFirst == true)
                    {
                        tableHead = strLine.Split(',');
                        IsFirst = false;
                        columnCount = tableHead.Length;
                        //创建列
                        for (int i = 0; i < columnCount; i++)
                        {
                            DataColumn dc = new DataColumn(tableHead[i]);
                            dt.Columns.Add(dc);
                        }
                    }
                    else
                    {
                        aryLine = strLine.Split(',');
                        DataRow dr = dt.NewRow();
                        for (int j = 0; j < columnCount; j++)
                        {
                            dr[j] = aryLine[j];
                        }
                        dt.Rows.Add(dr);
                    }
                }
                if (aryLine != null && aryLine.Length > 0)
                {
                    dt.DefaultView.Sort = tableHead[0] + " " + "asc";
                }            sr.Close();
                fs.Close();
                return dt;
            }
      

  4.   

    你这个导入要重新修改数据吗?如果不用,下面代码就可,去了当中的代码。
      string ConnectionString;          
                string SQLString;
                ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Text;HDR=yes;FMT=Delimited\""; //注意是文件所在的文件夹,不是文件本身路径
                SQLString = "Select * from 8.csv";
                System.Data.OleDb.OleDbConnection ConnectionText = new System.Data.OleDb.OleDbConnection();
                ConnectionText.ConnectionString = ConnectionString;
                ConnectionText.Open();
                System.Data.OleDb.OleDbDataAdapter AdapterText = new System.Data.OleDb.OleDbDataAdapter(SQLString, ConnectionText);
                System.Data.DataSet DataSetText = new System.Data.DataSet("TextFiles");
                AdapterText.Fill(DataSetText, "TextFile");
                dgv.DataSource = DataSetText.Tables[0].DefaultView;
      

  5.   

    你的path是路径,如果7.csv是放在d:\,那么string path=@"D:\";
      

  6.   


    运行到dr[j] = aryLine[j];出错。索引超出了数组界限。
      

  7.   

    这个是else里,不从第一行读取,你可以不用else里的代码,看一下,注释了
      

  8.   

    导入原始excel文件的结果是这样用5楼方法保存,再用9楼方法导入是这样
      

  9.   

    我知道了,你保存是EXCEL,我这个是读取是CSV,不一样,
      

  10.   


    恩保存的是excel,但实际上是csv文件。所以再用1楼导入excel方法导入就出错了。
      

  11.   


    8楼9楼导入结果是一样的,只需要删掉前面的13列即可(datagridview设置原始是13列)。
    但是结果每一行的数据都到一列上去了。
    是不是strLine.Split(',');得改成“空格”分割,因为我用记事本打开看是列与列的数据之间是空格。
      

  12.   

    导入方法
            /// <summary>
            /// excel数据导入datagridview方法
            /// </summary>
            /// <param name="filePath"></param>
            /// <param name="dgv"></param>
            public void ExcelToDataGridView(string filePath, DataGridView dgv)
            {
                if (filePath.Contains(".xls"))
                {
                    //根据路径打开一个Excel文件并将数据填充到DataSet中
                    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'";//HDR=YES 有两个值:YES/NO,表示第一行是否字段名,默认是YES,第一行是字段名
                    OleDbConnection conn = new OleDbConnection(strConn);
                    conn.Open();
                    string strExcel = "";
                    OleDbDataAdapter myCommand = null;
                    DataSet ds = null;
                    strExcel = "select  * from   [sheet1$]";
                    myCommand = new OleDbDataAdapter(strExcel, strConn);
                    ds = new DataSet();
                    myCommand.Fill(ds, "table1");                //根据DataGridView的列构造一个新的DataTable
                    DataTable tb = new DataTable();
                    foreach (DataGridViewColumn dgvc in dgv.Columns)
                    {
                        if (dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell))
                        {
                            DataColumn dc = new DataColumn();
                            dc.ColumnName = dgvc.DataPropertyName;
                            //dc.DataType = dgvc.ValueType;//若需要限制导入时的数据类型则取消注释,前提是DataGridView必须先绑定一个数据源那怕是空的DataTable
                            tb.Columns.Add(dc);
                        }
                    }                //根据Excel的行逐一对上面构造的DataTable的列进行赋值
                    foreach (DataRow excelRow in ds.Tables[0].Rows)
                    {
                        int i = 0;
                        DataRow dr = tb.NewRow();
                        foreach (DataColumn dc in tb.Columns)
                        {
                            dr[dc] = excelRow[i];
                            i++;
                        }
                        tb.Rows.Add(dr);
                    }
                    //在DataGridView中显示导入的数据
                    dgv.Columns.Clear();
                    dgv.DataSource = tb;
                }            if (filePath.Contains(".csv"))
                {
                    string ConnectionString;
                    string SQLString;
                    ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Text;HDR=yes;FMT=Delimited\""; //注意是文件所在的文件夹,不是文件本身路径
                    SQLString = "Select * from 7.csv";
                    System.Data.OleDb.OleDbConnection ConnectionText = new System.Data.OleDb.OleDbConnection();
                    ConnectionText.ConnectionString = ConnectionString;
                    ConnectionText.Open();
                    System.Data.OleDb.OleDbDataAdapter AdapterText = new System.Data.OleDb.OleDbDataAdapter(SQLString, ConnectionText);
                    System.Data.DataSet DataSetText = new System.Data.DataSet("TextFiles");
                    AdapterText.Fill(DataSetText, "TextFile");
                    dgv.DataSource = DataSetText.Tables[0].DefaultView;
                   
       
               }
            }
          
                    
           /// 导入button
           /// </summary>
           /// <param name="sender"></param>
           /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
                //打开一个文件选择框
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Title = "导入数据";
                ofd.FileName = "";
                ofd.InitialDirectory = path;//ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);为了获取特定的系统文件夹,可以使用System.Environment类的静态方法GetFolderPath()。该方法接受一个Environment.SpecialFolder枚举,其中可以定义要返回路径的哪个系统目录
                ofd.Filter = "Excel文件(*.xls)|*.xls|csv文件(*.csv)|*.csv";
                ofd.ValidateNames = true;     //文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名
                ofd.CheckFileExists = true;  //验证路径有效性
                ofd.CheckPathExists = true; //验证文件有效性
                string strName = string.Empty;
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    strName = ofd.FileName;
                }            if (strName == "")
                {
                    MessageBox.Show("没有选择Excel文件!无法进行数据导入");
                    return;
                }
                ExcelToDataGridView(strName, this.dataGridView1); //Excel写错?            //不可列排序
                for (int i = 0; i < dataGridView1.Columns.Count; i++)
                {
                    dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
                }
                
            }       
      

  13.   

    保存方法 /// <summary>
            /// 保存button
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button2_Click(object sender, EventArgs e)
            {
                    
                    DataGridViewToExcel(this.dataGridView1);
                   }
            public static void DataGridViewToExcel(DataGridView dgv)
            {
                #region   验证可操作性            //申明保存对话框   
                SaveFileDialog dlg = new SaveFileDialog();
                //默然文件后缀   
                dlg.DefaultExt = "xls ";
                //文件后缀列表   
                dlg.Filter = "EXCEL文件(*.csv)|*.csv";
                //默然路径是系统当前路径   
                dlg.InitialDirectory = Directory.GetCurrentDirectory();
                //打开保存对话框   
                if (dlg.ShowDialog() == DialogResult.Cancel) return;
                //返回文件路径   
                string fileNameString = dlg.FileName;
                //验证strFileName是否为空或值无效   
                if (fileNameString.Trim() == " ")
                { return; }
                //定义表格内数据的行数和列数   
                int rowscount = dgv.Rows.Count;
                int colscount = dgv.Columns.Count;
                //行数必须大于0   
                if (rowscount <= 0)
                {
                    MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //列数必须大于0   
                if (colscount <= 0)
                {
                    MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //行数不可以大于65536   
                if (rowscount > 65536)
                {
                    MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //列数不可以大于255   
                if (colscount > 255)
                {
                    MessageBox.Show("数据记录行数太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //验证以fileNameString命名的文件是否存在,如果存在删除它   
                FileInfo file = new FileInfo(fileNameString);
                if (file.Exists)
                {
                    try
                    {
                        file.Delete();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                }
                #endregion
                object oMis = System.Reflection.Missing.Value;
                Microsoft.Office.Interop.Excel.Application objExcel = null;
                Microsoft.Office.Interop.Excel.Workbook objWorkbook = null;
                Microsoft.Office.Interop.Excel.Worksheet objsheet = null;
                try
                {
                    //申明对象   
                    objExcel = new Microsoft.Office.Interop.Excel.Application();
                    objWorkbook = objExcel.Workbooks.Add(oMis);
                    objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet;
                    //设置EXCEL不可见   
                    objExcel.Visible = false;                //向Excel中写入表格的表头   
                    int displayColumnsCount = 1;
                    for (int i = 0; i <= dgv.ColumnCount - 1; i++)
                    {
                        if (dgv.Columns[i].Visible == true)
                        {
                            objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
                            displayColumnsCount++;
                        }
                    }
                    //设置进度条   
                    //tempProgressBar.Refresh();   
                    //tempProgressBar.Visible   =   true;   
                    //tempProgressBar.Minimum=1;   
                    //tempProgressBar.Maximum=dgv.RowCount;   
                    //tempProgressBar.Step=1;   
                    //向Excel中逐行逐列写入表格中的数据   
                    for (int row = 0; row <= dgv.RowCount - 1; row++)
                    {
                        //tempProgressBar.PerformStep();                       displayColumnsCount = 1;
                        for (int col = 0; col < colscount; col++)
                        {
                            if (dgv.Columns[col].Visible == true)
                            {
                                try
                                {
                                    objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
                                    displayColumnsCount++;
                                }
                                catch (Exception)
                                {                            }                        }
                        }
                    }
                    //隐藏进度条   
                    //tempProgressBar.Visible   =   false;   
                    //保存文件   
                    objWorkbook.SaveAs(fileNameString, oMis, oMis, oMis, oMis,
                            oMis, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, oMis, oMis, oMis,
                            oMis, oMis);
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                finally
                {
                    //关闭Excel应用   
                    if (objWorkbook != null) objWorkbook.Close(oMis, oMis, oMis);
                    if (objExcel.Workbooks != null) objExcel.Workbooks.Close();
                    if (objExcel != null) objExcel.Quit();                objsheet = null;
                    objWorkbook = null;
                    objExcel = null;
                }
                MessageBox.Show(fileNameString + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }  
      

  14.   

    导入方法二 private void button6_Click(object sender, EventArgs e)
            {            this.dataGridView1.DataSource = newOpenCSV(path+"\\7.csv");
            }
            public DataTable newOpenCSV(string filePath)
            {
                //Encoding encoding = Common.GetType(filePath); //Encoding.ASCII;//
                DataTable dt = new DataTable();
                FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);            StreamReader sr = new StreamReader(fs, Encoding.Default);
                //StreamReader sr = new StreamReader(fs, encoding);
                //string fileContent = sr.ReadToEnd();
                //encoding = sr.CurrentEncoding;
                //记录每次读取的一行记录
                string strLine = "";
                //记录每行记录中的各字段内容
                string[] aryLine = null;
                string[] tableHead = null;
                //标示列数
                int columnCount = 0;
                //标示是否是读取的第一行
                bool IsFirst = true;
                //逐行读取CSV中的数据
                while ((strLine = sr.ReadLine()) != null)
                {
                    //strLine = Common.ConvertStringUTF8(strLine, encoding);
                    //strLine = Common.ConvertStringUTF8(strLine);                if (IsFirst == true)
                    {
                        tableHead = strLine.Split(',');
                        IsFirst = false;
                        columnCount = tableHead.Length;
                        //创建列
                        for (int i = 0; i < columnCount; i++)
                        {
                            DataColumn dc = new DataColumn(tableHead[i]);
                            dt.Columns.Add(dc);
                        }
                    }                    
                    else
                    {
                        aryLine = strLine.Split(',');
                        DataRow dr = dt.NewRow();
                        for (int j = 0; j < columnCount; j++)
                        {
                            dr[j] = aryLine[j];
                        }
                        dt.Rows.Add(dr);
                    }
                                     }
                if (aryLine != null && aryLine.Length > 0)
                {
                    dt.DefaultView.Sort = tableHead[0] + " " + "asc";
                }            sr.Close();
                fs.Close();
                return dt;
            }
      

  15.   

    最终代码如下:
    /// <summary>
            /// 导入button
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
                //打开一个文件选择框
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Title = "导入数据";
                ofd.FileName = "";
                ofd.InitialDirectory = path;//ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);为了获取特定的系统文件夹,可以使用System.Environment类的静态方法GetFolderPath()。该方法接受一个Environment.SpecialFolder枚举,其中可以定义要返回路径的哪个系统目录
                ofd.Filter = "Excel文件(*.xls)|*.xls|Txt文件(*.txt)|*.txt";
                ofd.ValidateNames = true;     //文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名
                ofd.CheckFileExists = true;  //验证路径有效性
                ofd.CheckPathExists = true; //验证文件有效性
                string strName = string.Empty;
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    strName = ofd.FileName;
                }            if (strName == "")
                {
                    MessageBox.Show("没有选择数据文件!无法进行数据导入!");
                    return;
                }
                FileToDataGridView(strName, this.dataGridView1);            //不可列排序
                for (int i = 0; i < dataGridView1.Columns.Count; i++)
                {
                    dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
                }        }
            /// <summary>
            /// 导入文件方法
            /// </summary>
            /// <param name="filePath"></param>
            /// <param name="dgv"></param>
            public void FileToDataGridView(string filePath, DataGridView dgv)
            {
                if (filePath.Contains(".xls"))
                {
                    //根据路径打开一个Excel文件并将数据填充到DataSet中
                    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'";//HDR=YES 有两个值:YES/NO,表示第一行是否字段名,默认是YES,第一行是字段名
                    OleDbConnection conn = new OleDbConnection(strConn);
                    conn.Open();
                    string strExcel = "";
                    OleDbDataAdapter myCommand = null;
                    DataSet ds = null;
                    strExcel = "select  * from   [sheet1$]";
                    myCommand = new OleDbDataAdapter(strExcel, strConn);
                    ds = new DataSet();
                    myCommand.Fill(ds, "table1");                //根据DataGridView的列构造一个新的DataTable
                    DataTable tb = new DataTable();
                    foreach (DataGridViewColumn dgvc in dgv.Columns)
                    {
                        if (dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell))
                        {
                            DataColumn dc = new DataColumn();
                            dc.ColumnName = dgvc.DataPropertyName;
                            //dc.DataType = dgvc.ValueType;//若需要限制导入时的数据类型则取消注释,前提是DataGridView必须先绑定一个数据源那怕是空的DataTable
                            tb.Columns.Add(dc);
                        }
                    }                //根据Excel的行逐一对上面构造的DataTable的列进行赋值
                    foreach (DataRow excelRow in ds.Tables[0].Rows)
                    {
                        int i = 0;
                        DataRow dr = tb.NewRow();
                        foreach (DataColumn dc in tb.Columns)
                        {
                            dr[dc] = excelRow[i];
                            i++;
                        }
                        tb.Rows.Add(dr);
                    }                //在DataGridView中显示导入的数据
                    dgv.Columns.Clear();
                    dgv.DataSource = tb;
                }            if (filePath.Contains(".txt"))
                {
                    //Encoding encoding = Common.GetType(filePath); //Encoding.ASCII;
                    DataTable dt = new DataTable();
                    FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);                StreamReader sr = new StreamReader(fs, Encoding.Default);
                    //StreamReader sr = new StreamReader(fs, encoding);
                    //string fileContent = sr.ReadToEnd();
                    //encoding = sr.CurrentEncoding;
                    //记录每次读取的一行记录
                    string strLine = "";
                    //记录每行记录中的各字段内容
                    string[] aryLine = null;
                    string[] tableHead = null;
                    //标示列数
                    int columnCount = 0;
                    //标示是否是读取的第一行
                    bool IsFirst = true;
                    //逐行读取CSV中的数据
                    while ((strLine = sr.ReadLine()) != null)
                    {
                        //strLine = Common.ConvertStringUTF8(strLine, encoding);
                        //strLine = Common.ConvertStringUTF8(strLine);                    if (IsFirst == true)
                        {
                            tableHead = strLine.Split('\t');
                            IsFirst = false;
                            columnCount = tableHead.Length;
                            //创建列
                            for (int i = 0; i < columnCount; i++)
                            {
                                DataColumn dc = new DataColumn(tableHead[i]);
                                dt.Columns.Add(dc);
                            }
                        }
                        else
                        {
                            aryLine = strLine.Split('\t');
                            DataRow dr = dt.NewRow();
                            for (int j = 0; j < columnCount; j++)
                            {
                                dr[j] = aryLine[j];
                            }
                            dt.Rows.Add(dr);
                        }
                    }                if (aryLine != null && aryLine.Length > 0)
                    {
                        //dt.DefaultView.Sort = tableHead[0] + " " + "asc";
                    }                sr.Close();
                    fs.Close();
                    this.dataGridView1.Columns.Clear();
                    dgv.DataSource = dt;
                }
            }
            /// <summary>
            /// 保存button
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button2_Click(object sender, EventArgs e)
            {
                SaveFileDialog dlg = new SaveFileDialog();   //实例化一个SaveFileDialog保存文件对话框
                dlg.Filter = "txt文件(*.txt)|*.txt";
                dlg.FilterIndex = 0;
                dlg.RestoreDirectory = true;
                dlg.CreatePrompt = true;
                dlg.Title = "保存为txt文件";
                dlg.FileName = "trainhistorydata.txt";
                dlg.InitialDirectory = path;
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    DataGridViewToTxt(dlg, this.dataGridView1);
                }
            }
            /// <summary>
            /// 保存文件方法
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void DataGridViewToTxt(SaveFileDialog sfd, DataGridView dgv)
            {
                Stream mystream;  //stream类是读写字节数据的数据流类中最基础的基类
                mystream = sfd.OpenFile();    //打开用户选定的具有读写权限的文件,并把获取的文件路径赋值给mystream
                StreamWriter sw = new StreamWriter(mystream, System.Text.Encoding.GetEncoding(-0));   //实例化数据流的写入,encoding获取编码方式
                string columntitle = "";            try
                {
                    //写入列标题
                    for (int i = 0; i < dgv.ColumnCount; i++)
                    {
                        if (i > 0)
                        {
                            columntitle += "\t"; //添加一个分隔符
                        }
                        columntitle += dgv.Columns[i].HeaderText;
                    }
                    sw.WriteLine(columntitle);
                    //写入列内容
                    for (int j = 0; j < dgv.Rows.Count; j++)
                    {
                        string columnvalue = "";
                        for (int k = 0; k < dgv.Columns.Count; k++)
                        {
                            if (k > 0)
                                columnvalue += "\t";
                            if (dgv.Rows[j].Cells[k].Value == null)
                                columnvalue += "";
                            else
                                columnvalue += dgv.Rows[j].Cells[k].Value.ToString().Trim();
                        }
                        sw.WriteLine(columnvalue);
                    }
                    sw.Close();
                    mystream.Close();
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
                finally
                {
                    sw.Close();
                    mystream.Close();
                }
            }结贴啦