我有一个DataTable1,它包含一些从Excel导入的行。此Excel表的第1行包含与我的应用程序无关的数据。当我将此工作表导入DataTable1时,第一行将成为标题。
我要完成的任务:删除标题行,以便当我将DataTable1克隆到DataTable2时,DataTable1的第二行(以前是删除之前的第三行)是DataTable2的标题。我并不试图隐藏DataTable1的标题--我试图完全删除它,而不必在Excel中手动删除它。这个标题/单元格总是可以识别的,因为在Excel表中,第一个单元格的值实际上是“不必要的数据”。
所以,例如::
不必要的数据
/T1581-1998技术标准
/T1459.2-1993自愿性、无偿性、无偿性、成品率等
/T1459.2-1993自愿性、无偿性、无偿性、成品率等
/T1459.2-1993自愿性、无偿性、无偿性、成品率等
/T1459.2-1993自愿性、无偿性、无偿性、成品率等
/T1459.2-1993自愿性、无偿性、无偿性、成品率等
将变成:
/T1581-1998技术标准
/T1459.2-1993自愿性、无偿性、成品率等
/T1459.2-1993自愿性、无偿性、无偿性、成品率等
/T1459.2-1993自愿性、无偿性、无偿性、成品率等
/T1459.2-1993自愿性、无偿性、无偿性、成品率等
/T1459.2-1993自愿性、无偿性、无偿性、成品率等
我做了一堆谷歌搜索和头脑风暴,我不知道如何做到这一点。
我试过:
if (DataTable1.Rows[0][0].ToString() == "Unnecessary Data")
{
DataTable2 = DataTable1.Clone();
DataTable2.Rows.Remove(DataTable1.Rows[0]);
}这不起作用,因为Row实际上是我的标题之后的第一行。
if (DataTable1.Rows[0][-1].ToString() == "Unnecessary Data")
{
DataTable2 = DataTable1.Clone();
DataTable2.Rows.Remove(DataTable1.Rows[0]);
}也不起作用,因为-1不是索引。有人能帮忙吗?
发布于 2020-06-24 00:42:45
如果目标是使用第二行的值来设置dataTable1的列名,并去掉第一行和第二行:
dataTable1.Columns.Cast<DataColumn>()
.ToList()
.ForEach(c => c.ColumnName = dataTable1.Rows[1][c.Ordinal].ToString());
dataTable1.Rows.RemoveAt(0);
dataTable1.Rows.RemoveAt(0);但是,如果您需要保持dataTable1原样并创建一个新的DataTable:
var dataTable2 = dataTable1.AsEnumerable().Skip(2).CopyToDataTable();
dataTable2.Columns.Cast<DataColumn>()
.ToList()
.ForEach(c => c.ColumnName = dataTable1.Rows[1][c.Ordinal].ToString());

发布于 2020-06-23 21:05:00
我构建了这个例子,没有必要克隆任何东西,希望它能有所帮助:
var dt = new DataTable();
dt.Columns.Add("Test");
dt.Rows.Add("1");
dt.Rows.Add("2");
dt.Rows.Add("3");
dt.Rows.RemoveAt(0);
dt.Rows.RemoveAt(0);
// contains "3"
var test = dt.Rows[0].ItemArray[0];如果您希望第二行成为标题,我会这样做,只是不确定您的类型是什么情况:
var dt = new DataTable();
dt.Columns.Add("Test");
dt.Rows.Add("1");
dt.Rows.Add("2");
dt.Rows.Add("3");
dt.Rows.RemoveAt(0);
var i = 0;
foreach(var col in dt.Rows[0].ItemArray)
{
dt.Columns[i].ColumnName = col.ToString();
i++;
}
dt.Rows.RemoveAt(0);
// contains "3"
var test = dt.Rows[0].ItemArray[0];发布于 2020-06-23 22:05:50
关于如何从excel文件导入DataTable没有足够的详细信息,我甚至不确定您使用的DataTable是来自Microsoft.Office.Interop.Excel的DataTable还是从System.Data中导入的
如果确保将DataTable转换为DataTable of System.Data命名空间,则这段代码将修复您的问题:
DataTable.Rows[rowIndex].Delete();正如您在下面的示例中看到的那样:
//create a DataTable
DataTable dataTable = new DataTable();
//Add Columns for DataTable
dataTable.Columns.Add(new DataColumn("First Column"));
dataTable.Columns.Add(new DataColumn("Second Column"));
//Add redundant DataRow and another DataRow to DataTable
DataRow dataRow = dataTable.NewRow();
dataRow[0] = "_";
dataRow[1] = "Redundant Row";
dataTable.Rows.Add(dataRow);
dataRow = dataTable.NewRow();
dataRow[0] = "1";
dataRow[1] = "First Row";
dataTable.Rows.Add(dataRow);
//print out the DataTable before deleting redundant DataRow
Console.WriteLine("\n" + dataTable.Columns[0] + "\t" + dataTable.Columns[1] + "\n");
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine(row[0] + "\t\t" + row[1]);
}
//delete redundant DataRow
dataTable.Rows[0].Delete();
//print again the DataSet to see results
Console.WriteLine("\n" + dataTable.Columns[0] + "\t" + dataTable.Columns[1] + "\n");
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine(row[0] + "\t\t" + row[1]);
}代码执行后的结果是:
在dataTable.Rows[0].Delete();执行之前:
First Column Second Column
_ Redundant Row
1 First Row在dataTable.Rows[0].Delete();执行之后:
First Column Second Column
1 First Row希望这能帮到你。
https://stackoverflow.com/questions/62543559
复制相似问题