#DataGridView#将excel表中数据导入到DataGridView中

这篇博客介绍如何通过Stream技术将Excel文件中的数据导入到.NET中的DataGridView控件,重点在于动态定义控件的行数和列数。

/*Excel文件《mtrdata.xls》,导入到数据表格控件DataGridView——mtrdata中。*/

/*利用文件流Stream技术进行导入操作。导入过程要注意控件的行数和列数的动态定义*/

 

using System.IO;//为了应用Stream技术,需要引用本名称空间

private void toolStripImp_Click(object sender, EventArgs e)

        {
            OpenFileDialog dlg = new OpenFileDialog();//定义导入文件对话框,以便用户选择所需导入的文件
            dlg.Filter = "txt files (*.txt)|*.txt|excel files (*.xls)|*.xls|All files (*.*)|*.*";
            dlg.FilterIndex = 2;
            dlg.Title = "导入文件选择";
            dlg.RestoreDirectory = true;
            dlg.ShowDialog();


            Stream mystream;
            if ((mystream = dlg.OpenFile()) != null)//用户已选择有效文件,同时该文件装载进文件流mystream
            {
                StreamReader sr = new StreamReader(mystream, System.Text.Encoding.GetEncoding(-0));//定义流的读取操作

                

                if (dlg.FilterIndex == 2)//选择的是excel文件

                {
                    //读取数据
                   
                    string columnTitle = "",tempString="";
                   
                    int size = columnTitle .Count();
                    int rowsize = 0;
                    int columnsize = mtrData.ColumnCount;
                    int dataptr = 0;
                    
                    //将文件的所有内容读入
                    columnTitle = sr.ReadToEnd();//将文件流mystream中的数据全部读出到columnTitle 中。
                  
                    //导入列表头
                    for (int j = 0; j < mtrData.ColumnCount; j++)
                    {
                        tempString = "";
                        while (columnTitle[dataptr] != '\t'&& columnTitle[dataptr] != '\r')
                        {
                             tempString+=Convert.ToString(columnTitle[dataptr]);
                             dataptr++;
                        }
                        mtrData.Columns[j].HeaderText = tempString;
                        dataptr++;
                    }
                    //导入列表数据


                    for (int i=0;i<columnTitle.Count();i++)//根据columnTitle 中的换行符,计算导入数据的实际行数
                    {
                        if (columnTitle[i] == '\r')
                        {
                            rowsize++;
                        }
                    }
                    mtrData.RowCount = rowsize;//用导入数据的实际行数,更新控件mtrData的行数。这样,后面的按行幅值操作就不会出现控件单元数组的溢出问题。


                    rowsize = 0;
                    while (dataptr< columnTitle.Count())
                    {
                        dataptr++;
                        if (dataptr >= columnTitle.Count())
                        {
                            break;
                        }
                        
                        for (int j = 0; j < mtrData.ColumnCount; j++)
                        {
                            tempString = "";
                            while (columnTitle[dataptr] != '\t' && columnTitle[dataptr] != '\r')
                            {
                                tempString += Convert.ToString(columnTitle[dataptr]);
                                dataptr++;
                            }
                            mtrData.Rows[rowsize].Cells[j].Value = tempString;
                            dataptr++;
                        }
                        rowsize++;
                    }
                    mtrData.RowCount = rowsize;//更新DataGridView的行数
                    sr.Close();
                    mystream.Close();
                }
            }


           
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值