/*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();
}
}
}
这篇博客介绍如何通过Stream技术将Excel文件中的数据导入到.NET中的DataGridView控件,重点在于动态定义控件的行数和列数。

3万+

被折叠的 条评论
为什么被折叠?



