从数据集中删除行

3

我想将一个Excel数据表复制到我的datagridview中,但我想从表所在的特定行(第9行)开始(该行之前有标题、注释等,不属于表格)。 我使用以下代码,但它不会从数据集中删除该行。

    MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;")
    MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)

    DtSet = New System.Data.DataSet
    MyCommand.Fill(DtSet)
    DtSet.Tables(0).Rows(3).Delete()
    DtSet.Tables(0).Rows(3).AcceptChanges()


    dataGridArray(selectedTab).DataSource = DtSet.Tables(0)

    'MsgBox("number of Row(s)   -   " & DtSet.Tables(0).Rows.Count)

    MyConnection.Close()

在执行了delete()acceptChanges之后,我仍然可以看到标题。

有人能否看出我错在哪里? 谢谢。

3个回答

5
你不想删除Excel中的行,但你想从表格中移除它。
所以,不是:
DtSet.Tables(0).Rows(3).Delete()

使用:
DtSet.Tables(0).Rows.RemoveAt(3)

但是,如果你不想像你的代码建议那样删除单行,而是要删除前9行的所有行,请使用:

For i As Int32 = 1 To 8
    DtSet.Tables(0).Rows.RemoveAt(0)
Next

是的,你说得对,我不想把它删除。我想要的结果是我的数据在dgv中正确填充。但是似乎没有起作用,我得到了相同的结果。谢谢。 - Nihilo
好的,我尝试了一下。它确实删除了行。但现在我的dgv中有“title,comments”等作为标题。即使我填充了第3行和第4行的文本等(我不想在我的dgv中出现),我仍然会在我的dgv中得到第3行的内容作为标题,而第4行则被正确地移除。 - Nihilo
@Nihilo:没有样本数据很难提供帮助。您是否使用调试器查看了DataTable中的内容(您可以在快速监视窗口中检查整个表,使用放大镜)?您曾经提到过可以删除第9行之前的所有内容,这不再正确吗? - Tim Schmelter
现在我通过检查看到了发生的事情。当我开始删除行时,它已经将第3行(我不想要的)设置为列标题。因此,在我的原始Excel表中的第3行中的文本最终出现在dataTable的列标题中。这就是为什么它没有在您给我的循环中被删除。所以它将真正的第一行数据作为标题放置,但我想要我的第9行作为表格开始的标题。有什么我可以做的吗?我们接近了,再次感谢您。 - Nihilo

1
我用以下代码解决了它,我不知道它是否是最好的优雅解决方案,但它可以工作:
     MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=""Excel 12.0;IMEX=1""")
    MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)
    '  MyCommand.TableMappings.Add("Table", "Net-informations.com")
    DtSet = New System.Data.DataSet
    MyCommand.Fill(DtSet)


    'find row with the second "item", there are 2. Its where my table starts
    For r = 0 To DtSet.Tables(0).Rows.Count - 1
        If DtSet.Tables(0).Rows(r).Item(0).ToString = "Item" Then
            headerRowSearched = r
        End If
    Next

    'correct name header with the right one. 
    For c As Integer = 0 To DtSet.Tables(0).Columns.Count - 1
        DtSet.Tables(0).Columns(c).ColumnName = DtSet.Tables(0).Rows(headerRowSearched)(c)
    Next

    'remove all the junk rows up to my header
    For i As Int32 = 0 To headerRowSearched
        DtSet.Tables(0).Rows.RemoveAt(0)
    Next

    dataGridArray(selectedTab).DataSource = DtSet.Tables(0)

    MyConnection.Close()

0
我会删除列标题,并用第9行中的数据替换它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接