怎么给datatable 表格动态增加行
1、在VS2010中,构建Excel表导入数据的WinForm界面,如下图所示:

2、在VS2010的解决方案管理器点击“右键—>添加引用”,将NPOI组件添加到项目中,如下图所示:

3、给导入按钮的_Click方法,编写导入的数据解释代码,主要是通过NPOI引入数据,部分代码如下:
int intFirstRow = 0;
if (numStartRow.Value > 0)
{
intFirstRow = (int)(numStartRow.Value) - 1;
}
dt = null;
dt = Import.ImportExcel(file, ccbRepType.SelectedIndex, intFirstRow); //导入数据,首行默认0

4、通过自定义的Import类,给datatable增加动态的列,主要代码如下:
int cellCount = headerRow.LastCellNum;
//一定要对单元格类型作判断 否则会报错
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
if (headerRow.GetCell(i) == null || headerRow.GetCell(i).ToString().Trim() == "") //StringCellValue.Trim() == ""
{
// 如果遇到第一个空列,则不再继续向后读取 LJS
cellCount = i + 1;
break;
}
DataColumn column = new DataColumn(Convert.ToChar(((int)'A') + i).ToString());
table.Columns.Add(column);
}

5、通过自定义的Import类,将行数据动态写入到datatable中去,部分代码如下:
for (int i = HeaderRowIndex; i <= sheet.LastRowNum; i++)
{
HSSFRow row = (HSSFRow)sheet.GetRow(i);
if (row == null || row.GetCell(0) == null || row.GetCell(0).ToString().Trim() == "")
{
// 如果遇到第一个空行,则不再继续向后读取
break;
}
DataRow dataRow = table.NewRow();
for (int j = row.FirstCellNum; j < cellCount; j++)
{
HSSFCell cell = (HSSFCell)row.GetCell(j);
if (row.GetCell(j) != null)
{
switch ((HSSFCellType)cell.CellType)
{
case HSSFCellType.BLANK:
dataRow[j] = cell.StringCellValue;
break;
case HSSFCellType.BOOLEAN:
dataRow[j] = cell.BooleanCellValue;
break;
case HSSFCellType.NUMERIC:
dataRow[j] = cell.NumericCellValue;
break;
……
}
}
table.Rows.Add(dataRow);

6、NPOI控件
笔者以上所用的npoi版本为1.2.5版本(部分自定义修改了),对于具体npoi相关资料可以从网上查找获得。