datagridview不显示空值&&只导出显示出的数据(去掉隐藏列)

这段代码展示了如何从Datagridview中移除空值列,并在导出到Excel时仅包含可见列。通过遍历 Datagridview 的列,检查是否存在非空值来决定是否隐藏该列。在导出时,只写入那些在 Datagridview 中显示的列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//datagridview不显示空值,即隐藏空值列

 public static DataGridView RemoveEmptyCol(DataGridView grdView)
        {
            foreach (DataGridViewColumn clm in grdView.Columns)
            {
                bool notAvailable = true;
                foreach (DataGridViewRow row in grdView.Rows)
                {
                    if (!string.IsNullOrEmpty(row.Cells[clm.Index].Value.ToString()))
                    {
                        notAvailable = false;
                        break;
                    }
                }
                if (notAvailable)
                {
                    grdView.Columns[clm.Index].Visible = false;
                }
            }

            return grdView;

        }

//导出是去掉隐藏列

 public static void DataToExcel(string FileName, DataGridView m_DataView, DataTable dt)
        {
            if (FileName.Length != 0)
            {
                FileStream objFileStream;
                string strLine = "";
                objFileStream = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write);
                StreamWriter objStreamWriter = new StreamWriter(objFileStream, System.Text.Encoding.Unicode);
                for (int i = 0; i < m_DataView.Columns.Count; i++)
                {
                    if (m_DataView.Columns[i].Visible == true)
                    {
                        strLine = strLine + m_DataView.Columns[i].HeaderText.ToString() + Convert.ToChar(9);
                    }
                }
                objStreamWriter.WriteLine(strLine);
                strLine = "";
                for (int i = 0; i < m_DataView.Rows.Count; i++)
                {
                    for (int j = 0; j < m_DataView.Columns.Count; j++)
                    {
                        if (m_DataView.Columns[j].Visible == true)
                        {
                            if (m_DataView.Rows[i].Cells[j].Value == null)
                                strLine = strLine + " " + Convert.ToChar(9);
                            else
                            {
                                string rowstr = "";
                                rowstr = m_DataView.Rows[i].Cells[j].Value.ToString();
                                if (rowstr.IndexOf("\r\n") > 0)
                                    rowstr = rowstr.Replace("\r\n", " ");
                                if (rowstr.IndexOf("\t") > 0)
                                    rowstr = rowstr.Replace("\t", " ");
                                strLine = strLine + rowstr + Convert.ToChar(9);
                            }
                        }
                    }
                    objStreamWriter.WriteLine(strLine);
                    strLine = "";
                }
                objStreamWriter.Close();
                objFileStream.Close();

            }
        }

 ////////////////////////////////////////////////////////

  private void BtnExportToExcel_Click(object sender, EventArgs e)
        {

            if (dt.Rows.Count <= 0)
            {
                return;
            }

            this.saveFileDialog1.FileName = "查询xls";

            if (this.saveFileDialog1.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            fileName = this.saveFileDialog1.FileName.Trim();

            if (!fileName.ToLower().EndsWith(".xls"))
            {
                fileName = fileName + ".xls";
            }
            string errMsg = "";

            bool ok = ExcelHelper.ExportToExcel(dt, fileName, "查询", out errMsg);

}

 public class ExcelHelper
    {
        public static bool ExportToExcel(DataTable SourceDataTable, string FileName, string SheetName, out string ErrMsg)
        {
            ErrMsg = string.Empty;

            FileStream fs = null;

            try
            {
                if (File.Exists(FileName))
                    File.Delete(FileName);

                Thread.Sleep(5000);

                fs = new FileStream(FileName, FileMode.CreateNew, FileAccess.Write);

                HSSFWorkbook workbook = new HSSFWorkbook();

                HSSFSheet sheet = workbook.CreateSheet(SheetName);

                CreateHeader(SourceDataTable, workbook, sheet);

                FillData(SourceDataTable, workbook, sheet);

                workbook.Write(fs);

                Thread.Sleep(1000 * 30);

                return true;
            }
            catch (Exception ex)
            {
                ErrMsg = ex.Message + "\r\n" + ex.StackTrace;
                return false;
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();

                    fs.Dispose();
                }
            }
        }

        public static bool ExportToExcel(DataSet SourceDataSet, string FileName, string[] SheetNames, out string ErrMsg)
        {
            ErrMsg = string.Empty;

            FileStream fs = null;

            try
            {
                if (File.Exists(FileName))
                    File.Delete(FileName);

                fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);

                HSSFWorkbook workbook = new HSSFWorkbook();

                for (int i = 0; i < SourceDataSet.Tables.Count; i++)
                {
                    HSSFSheet sheet = workbook.CreateSheet(SheetNames[i]);

                    CreateHeader(SourceDataSet.Tables[i], workbook, sheet);

                    FillData(SourceDataSet.Tables[i], workbook, sheet);
                }

                workbook.Write(fs);

                return true;
            }
            catch (Exception ex)
            {
                ErrMsg = ex.Message + "\r\n" + ex.StackTrace;
                return false;
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();

                    fs.Dispose();
                }
            }
        }

        public static bool FillSheet(DataTable SourceDataTable, HSSFWorkbook Workbook, HSSFSheet Sheet, out string ErrMsg)
        {
            ErrMsg = string.Empty;

            try
            {
                CreateHeader(SourceDataTable, Workbook, Sheet);

                FillData(SourceDataTable, Workbook, Sheet);

                return true;
            }
            catch (Exception ex)
            {
                ErrMsg = ex.Message + "\r\n" + ex.StackTrace;
                return false;
            }
        }

        private static void CreateHeader(DataTable SourceDataTable, HSSFWorkbook Workbook, HSSFSheet Sheet)
        {
            HSSFCellStyle headStyle = Workbook.CreateCellStyle();

            headStyle.Alignment = CellHorizontalAlignment.CENTER;
            HSSFFont font = Workbook.CreateFont();

            font.FontHeightInPoints = 10;
            font.Boldweight = 200;
            headStyle.SetFont(font);

            for (int i = 0; i < SourceDataTable.Columns.Count; i++)
            {
                HSSFRow row = Sheet.CreateRow(0);

                HSSFCell cell = row.CreateCell(i);

                row.HeightInPoints = 25f;
                cell.CellStyle = headStyle;

                cell.SetCellValue(SourceDataTable.Columns[i].ColumnName);
            }
        }

        private static void FillData(DataTable SourceDataTable, HSSFWorkbook Workbook, HSSFSheet Sheet)
        {
            int rows = SourceDataTable.Rows.Count;

            int cols = SourceDataTable.Columns.Count;

            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    HSSFRow row = Sheet.CreateRow(i + 1);

                    row.HeightInPoints = 15f;

                    HSSFCell cell = null;

                    string valueStr = SourceDataTable.Rows[i][j].ToString();

                    switch (SourceDataTable.Columns[j].DataType.ToString())
                    {
                        case "System.String"://字符串类型
                            cell = row.CreateCell(j, HSSFCellType.STRING);
                            cell.SetCellValue(valueStr);
                            break;
                        case "System.DateTime"://日期类型
                            DateTime dateV;
                            DateTime.TryParse(valueStr, out dateV);
                            cell = row.CreateCell(j, HSSFCellType.STRING);
                            cell.SetCellValue(dateV);

                            //cell.CellStyle = dateStyle;//格式化显示
                            break;
                        case "System.Boolean"://布尔型
                            bool boolV = false;
                            bool.TryParse(valueStr, out boolV);
                            cell = row.CreateCell(j, HSSFCellType.BOOLEAN);
                            cell.SetCellValue(boolV);
                            break;
                        case "System.Int16"://整型
                        case "System.Int32":
                        case "System.Int64":
                        case "System.Byte":
                            int intV = 0;
                            int.TryParse(valueStr, out intV);
                            cell = row.CreateCell(j, HSSFCellType.NUMERIC);
                            cell.SetCellValue(intV);
                            break;
                        case "System.Decimal"://浮点型
                        case "System.Double":
                            double doubV = 0;
                            double.TryParse(valueStr, out doubV);
                            cell = row.CreateCell(j, HSSFCellType.NUMERIC);
                            cell.SetCellValue(doubV);
                            break;
                        case "System.DBNull"://空值处理
                            cell = row.CreateCell(j, HSSFCellType.STRING);
                            cell.SetCellValue("");
                            break;
                        default:
                            cell = row.CreateCell(j, HSSFCellType.STRING);
                            cell.SetCellValue("");
                            break;
                    }

                    int colNameLength = SourceDataTable.Columns[j].ColumnName.Length;
                    int valueLength = SourceDataTable.Rows[0][j].ToString().Length;

                    int maxLength = Math.Max(colNameLength, valueLength);

                    if (maxLength < 5)
                        maxLength = 5;

                    Sheet.SetColumnWidth(j, maxLength * 400);
                }
            }

            HSSFRow rowRemark = Sheet.CreateRow(rows + 1);

            HSSFCell cellRemark = rowRemark.CreateCell(0, HSSFCellType.BLANK);

        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值