【问题标题】:DevExpress export GridView to ExcelDevExpress 将 GridView 导出到 Excel
【发布时间】:2013-01-29 12:36:57
【问题描述】:

我真的需要这方面的帮助。我在互联网上找不到任何示例 我正在使用 DevExpress GridView 我需要将它发送到 excel 并且我遇到了循环到每个单元格和列的问题,因为 DevExpress 包含与 DataGridView 不同的方法

这就是我正在尝试编写的代码.. 非常感谢您的帮助

    public class Form1 : System.Windows.Forms.Form
    {
    Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

    string FirstName = "First Name";
    string FatherName = "Father Name";
    string LastName = "Last Name";
    }
    public Form1()
    {
        ExcelApp.Application.Workbooks.Add(Type.Missing);
        ExcelApp.Columns.ColumnWidth = 20;
        //
        // Required for Windows Form Designer support
        //
        InitializeComponent();

        //
        // TODO: Add any constructor code after InitializeComponent call
        //
    }
    private void simpleButton1_Click(object sender, System.EventArgs e)
    {
        try
        {
            OleDbConnection con = new OleDbConnection();
            con.ConnectionString = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=C:\\Users\\pc\\Documents\\Emp.xlsx;Extended Properties=\"Excel 12.0;HDR=Yes\"";

            con.Open();
            DataTable dtSchema;
            dtSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
            OleDbCommand Command = new OleDbCommand ("select * FROM [" + dtSchema.Rows[0]["TABLE_NAME"].ToString() + "]", con);
            OleDbDataAdapter da = new OleDbDataAdapter(Command);
            DataSet ds = new DataSet ();
            da.Fill(ds);
            dataGrid1.DataSource = ds.Tables[0];
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    private void ExportBtn_Click(object sender, System.EventArgs e)
    {
        for (int i = 1; i < gridView3.Columns.Count + 1; i++)
        {
            //ExcelApp.Cells[1, i] = gridView3.Columns[i].HeaderStyleName;

        }
        for (int i = 0; i< gridView3.RowCount - 1; i++)
        {
            for (int j = 0; j < gridView3.Columns.Count; j++)
            {
                ExcelApp.Cells[i + 2, j + 1] = gridView3.Columns[j].ToString();
            }
        }
        ExcelApp.ActiveWorkbook.SaveCopyAs("C:\\Users\\pc\\Emp.xlsx");
        ExcelApp.ActiveWorkbook.Saved = true;
        ExcelApp.Quit();
    }

我的问题在于“导出”按钮的点击事件。没有 Row() 之类的东西

【问题讨论】:

  • 你可以使用DevEx export mechanism
  • 我会试一试,但我希望我能知道我的错在哪里.. 谢谢你..
  • DevExpress 网格不提供像 DataGridView 这样的行对象的内部集合,因此您不能只说 row[3].column[2]。相反,您将在循环中使用 GetRowCellValue 方法来检索某个单元格的值。

标签: c# excel devexpress


【解决方案1】:

想了解XtraGrid的各种导出方法,请到Export Methods and Settings

使用GridControl.ExportToXls(String)方法

示例代码sn-p:

private void mnuExportTable_ItemClick_1(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
    using (SaveFileDialog saveDialog = new SaveFileDialog())
    {
        saveDialog.Filter = "Excel (2003)(.xls)|*.xls|Excel (2010) (.xlsx)|*.xlsx |RichText File (.rtf)|*.rtf |Pdf File (.pdf)|*.pdf |Html File (.html)|*.html";
        if (saveDialog.ShowDialog() != DialogResult.Cancel)
        {
            string exportFilePath = saveDialog.FileName;
            string fileExtenstion = new FileInfo(exportFilePath).Extension;
            
            switch (fileExtenstion)
            {
                case ".xls":
                    gridControl.ExportToXls(exportFilePath);
                    break;
                case ".xlsx":
                    gridControl.ExportToXlsx(exportFilePath);
                    break;
                case ".rtf":
                    gridControl.ExportToRtf(exportFilePath);
                    break;
                case ".pdf":
                    gridControl.ExportToPdf(exportFilePath);
                    break;
                case ".html":
                    gridControl.ExportToHtml(exportFilePath);
                    break;
                case ".mht":
                    gridControl.ExportToMht(exportFilePath);
                    break;
                default:
                    break;
            }

            if (File.Exists(exportFilePath))
            {
               try
               {
                   //Try to open the file and let windows decide how to open it.
                   System.Diagnostics.Process.Start(exportFilePath);
                }
                catch
                {
                    String msg = "The file could not be opened." + Environment.NewLine + Environment.NewLine + "Path: " + exportFilePath;
                    MessageBox.Show(msg, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
             }
             else
             {
                 String msg = "The file could not be saved." + Environment.NewLine + Environment.NewLine + "Path: " + exportFilePath;
                 MessageBox.Show(msg, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
             }
        }
    }
}

参考:
Exporting Several XtraGrid Controls to a Single Excel File

【讨论】:

    【解决方案2】:

    试试下面的代码。 SaveFileDialog1 是工具 还要添加所需的参考资料--

     Try
    
            Dim sv As New SaveFileDialog1
            SaveFileDialog1.Filter = "Excel Workbook|*.xlsx"
            If SaveFileDialog1.ShowDialog() = DialogResult.OK And SaveFileDialog1.FileName <> Nothing Then
                If SaveFileDialog1.FileName.EndsWith(".xlsx") Then
                    Dim path = SaveFileDialog1.FileName.ToString()
                    GridControlAFP.ExportToXlsx(path)
                    Dim xlApp As New Excel.Application
                    Dim xlWorkBook As Excel.Workbook
                    Dim xlWorkSheet As Excel.Worksheet
                    xlWorkBook = xlApp.Workbooks.Open(path)
                    xlWorkSheet = xlWorkBook.Sheets("Sheet")
                    xlWorkSheet.Range("A1:XFD1").EntireColumn.AutoFit()
    
                    xlWorkBook.Save()
                    xlWorkBook.Close()
                    xlApp.Quit()
                End If
    
    
                MessageBox.Show("Data Exported to :" + vbCrLf + SaveFileDialog1.FileName, "Business Intelligence Portal", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
                SaveFileDialog1.FileName = Nothing
    
            End If
        Catch ex As Exception
        End Try
    

    【讨论】:

      【解决方案3】:

      selectgridvalues 函数以 Datatable 格式返回数据库中的值。 在显示按钮中调用此函数会在网格控件中设置这些值。 导出按钮将值导出到 .xlsx 格式的 Excel 工作表中

          //function to get values from DataTable to gridControl Devexpress
          public DataTable selectgridvalues()
          {
            SqlConnection con;
            con = new SqlConnection();
            con.ConnectionString = "server='SERVER';uid='sa';pwd='1234';database='DBName'";
            con.Open();
      
            SqlDataAdapter adp = new SqlDataAdapter("select * from Tablename order by id ", con);
            DataTable dt = new DataTable();
            adp.Fill(dt);
            gridControl1.DataSource =dt;
          }
      
      
          //code on showdatagridview values button
          public void buttonShow_Click(object sender, EventArgs e)
          {         
              gridControl1.DataSource = selectgridvalues();
          }
      
      
           //code on export to excel button
           private void buttonExportExcel_Click(object sender, EventArgs e)
          {
              SaveFileDialog saveFileDialogExcel = new SaveFileDialog();
              saveFileDialogExcel.Filter = "Excel files (*.xlsx)|*.xlsx";
              if (saveFileDialogExcel.ShowDialog() == DialogResult.OK)
              {
                  string exportFilePath = saveFileDialogExcel.FileName;
                  gridControl1.DataSource = selectgridvalues();
                  gridControl1.ExportToXlsx(exportFilePath);
              }
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-25
        • 2014-12-20
        • 1970-01-01
        • 1970-01-01
        • 2015-05-31
        相关资源
        最近更新 更多