从数据集中删除行

时间:2015-01-22 10:57:30

标签: vb.net datagridview dataset oledb

我想将excel数据表复制到我的datagridview中,但我想从我的表所在的特定行开始(第9行)(之前有标题,注释等...)不属于桌子的一部分。) 我使用以下代码,但它不会删除dataset中的行。

    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 个答案:

答案 0 :(得分:4)

您不希望delete行(在Excel中),但您希望从表中remove

所以而不是:

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

答案 1 :(得分: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()

答案 2 :(得分:0)

我要做的只是删除列标题并将其替换为第9行中的数据。