dataGridView 控件导出数据到Excel

        最近给朋友做了个标签打印排版软件,记录一下一些常用的操作。

借鉴大佬一些操作,有需要的可以查看

C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作_ping_Kingzero的博客-优快云博客_c# datagridview

一开始初始化操作,设置一下dataGridView表头样式跟表格格式。 

            textBox_Day.Text = DateTime.Now.ToString("yyyy.MM.dd") + "  A776";
            textBox_BN.Text = DateTime.Now.ToString("yyyy.MM.dd") + "  17批";
            
            // 设置表头居中,其对齐方式一共有10种,包含竖向的顶中底和水平的左中右以及NotSet
            this.dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = 
            DataGridViewContentAlignment.MiddleCenter;
            //设置表头字体样式
            this.dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 11);
            //设置单元格cell内容居中
            this.dataGridView1.RowsDefaultCellStyle.Alignment =                 
            DataGridViewContentAlignment.MiddleCenter;
            //设置单元格cell字体样式
            this.dataGridView1.RowsDefaultCellStyle.Font = new Font("宋体", 11);
            this.dataGridView1.ColumnCount = ColNum;
            for (int i = 0; i < RowNum; i++)
            {
                this.dataGridView1.Rows.Add();  //新建行
            }

            this.dataGridView1.ColumnHeadersDefaultCellStyle.Alignment =                     
            DataGridViewContentAlignment.MiddleCenter; //设置表头的格式(居中显示)
            dataGridView1.Columns[0].HeaderText = "物料名称";
            dataGridView1.Columns[1].HeaderText = "规格型号";
            dataGridView1.Columns[2].HeaderText = "外控/高速";
            for (int i = 0; i < ColNum; i++)
            {
                dataGridView1.Columns[i].Width = ColWidth;//设置列宽度                
            }

            //设置自动换行  
            this.dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
            //设置自动调整高度  
            this.dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
            this.dataGridView1.ContextMenuStrip = this.contextMenuStrip1;

 设置dataGridView表格显示行号

        private void dataGridView1_RowPostPaint(object sender,        DataGridViewRowPostPaintEventArgs e)
        {
            var grid = sender as DataGridView;
            var rowidx = (e.RowIndex + 1).ToString();
            var centerFormat = new StringFormat()
            {
                Alignment = StringAlignment.Center,
                LineAlignment = StringAlignment.Center
            };
            var headerBuunds = new System.Drawing.Rectangle(e.RowBounds.Left,         e.RowBounds.Top, grid.RowHeadersWidth, e.RowBounds.Height);
            e.Graphics.DrawString(rowidx, new Font("宋体", 11), SystemBrushes.ControlText, headerBuunds, centerFormat);
        }

删除选中的dataGridView表格数据跟提供快捷键复制

        private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
        {
            // 根据选中的datagridview单元格,对其内容赋值为""
            int cellsCount = this.dataGridView1.SelectedCells.Count; //选中的单元格数量
                                                                     
            //按键按下删除按键
            if (e.KeyCode == Keys.Delete)
            {
                for (int i = 0; i < cellsCount; i++)//循环选中的单元格
                {
                    dataGridView1.SelectedCells[i].Value = "";
                }
            }
            //按下复制时将剪切板上内容复制到数据表格
            if ((e.Modifiers == Keys.Control) && (e.KeyCode == Keys.V))
            {
                opyData();
            }
        }

复制EXCEL数据到dataGridView表格

        public void CopyData()
        {
            try
            {
                string clipboardText = Clipboard.GetText(); //获取剪贴板中的内容
                if (string.IsNullOrEmpty(clipboardText))//检测是否为空
                {
                    return;
                }
                int colnum = 0;  //获取剪切板列数量
                int rownum = 0;  //获取剪切板行数量


                string temp = clipboardText;
                string[] arry = temp.Split('\r');
                int a = arry[0].Length - 1;

                for (int i = 0; i < a; i++)//循环选中的单元格
                {
                    if (arry[0].Substring(i, 1) == "\t") //每列
                    {
                        colnum++;
                    }
                }

                for (int i = 0; i < clipboardText.Length - 1; i++)
                {                    
                    if (clipboardText.Substring(i, 2) == "\r\n")  //每行
                    {
                        rownum++;
                    }
                }

                //粘贴板上的数据来源于EXCEL时,每行末尾都有\n,来源于DataGridView是,最后一行末尾没有\n
                if (clipboardText.Substring(clipboardText.Length - 1, 1) == "\n")  //剪切板最后一位
                {
                    rownum--;
                }

                object[,] data; //定义object类型的二维数组
                data = new object[rownum + 1, colnum + 1];  //根据剪贴板的行列数实例化数组
                                                            //根据创建的data数组的行列数,检测是否当前datagridview行数大于等于data数组行数,少于则新建行
                while (rownum > this.dataGridView1.RowCount - this.dataGridView1.SelectedCells[this.dataGridView1.SelectedCells.Count - 1].RowIndex - 1) //每次创建五行,直到数量足够
                {
                    for (int i = RowNum; i < rownum; i++)
                    {
                        this.dataGridView1.Rows.Add();
                    }
                }

                while(colnum > this.dataGridView1.ColumnCount - this.dataGridView1.SelectedCells[this.dataGridView1.SelectedCells.Count - 1].ColumnIndex - 1)
                {
                    for (int i = ColNum - 1; i < colnum; i++)
                    {                      
                        dataGridView1.Columns.Add("","");
                    }
                    //设置单元格cell内容居中
                    this.dataGridView1.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                    //设置单元格cell字体样式
                    this.dataGridView1.RowsDefaultCellStyle.Font = new Font("宋体", 11);
                    for (int i = ColNum; i <= colnum; i++)
                    {
                        dataGridView1.Columns[i].Width = ColWidth;//设置列宽度                
                    }
                }

                // 检查剪切板内的列是否多于datagridview内的列
                if ((colnum + 1) > this.dataGridView1.ColumnCount)
                {
                    MessageBox.Show("复制列数大于当前表格列数\n,请重新复制!");
                    return;
                }

                string rowStr = "";
                //对数组各元素赋值
                for (int i = 0; i <= rownum; i++)
                {
                    for (int j = 0; j <= colnum; j++)
                    {
                        //一行中的其它列
                        if (j < colnum)
                        {
                            rowStr = clipboardText.Substring(0, clipboardText.IndexOf("\t"));
                            clipboardText = clipboardText.Substring(clipboardText.IndexOf("\t") + 1); //将前面使用过的部分裁剪
                        }

                        //一行中的最后一列(最后一个不为\r)
                        if (j == colnum && clipboardText.IndexOf("\r") != -1)
                        {
                            rowStr = clipboardText.Substring(0, clipboardText.IndexOf("\r"));
                            clipboardText = clipboardText.Substring(clipboardText.IndexOf("\r") + 1); //将前面使用过的部分裁剪
                        }
                        
                        data[i, j] = rowStr;
                    }
                    //截取下一行及以后的数据
                    clipboardText = clipboardText.Substring(clipboardText.IndexOf("\n") + 1);
                }
                clipboardText = Clipboard.GetText();
                int cellsCount = this.dataGridView1.SelectedCells.Count; //选中的单元格数量
                int r1 = (this.dataGridView1.SelectedCells[cellsCount - 1].RowIndex); //选中的第一个的行下标
                int r2 = (this.dataGridView1.SelectedCells[0].RowIndex); //选中最后一个的行下标
                int c1 = (this.dataGridView1.SelectedCells[cellsCount - 1].ColumnIndex); //选中的第一个的列下标
                int c2 = (this.dataGridView1.SelectedCells[0].ColumnIndex); //选中的最后一个的列下表

                int rowIndex = Math.Abs(r2 - r1) + 1; //选中单元格的行数量
                int colIndex = Math.Abs(c2 - c1) + 1; //选中但换个的列数量

                if (colIndex != colnum + 1 || rowIndex != rownum + 1) //选中的行列数量与剪切板内的行列数量不一致
                {
                    //如果区域不一致,选取选中的第一格单元格作为锚点
                    for (int i = 0; i <= rownum; i++) //遍历行
                    {
                        for (int j = 0; j <= colnum; j++) //遍历列
                        {
                            this.dataGridView1.Rows[i + r1].Cells[j + c1].Value = data[i, j];
                        }
                    }
                }
                else
                {
                    for (int i = 0; i <= rownum; i++) //遍历行
                    {
                        for (int j = 0; j <= colnum; j++) //遍历列
                        {
                            this.dataGridView1.Rows[i + r1].Cells[j + c1].Value = data[i, j];
                        }
                    }
                }
            }
            catch { }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值