我DataGridView1和Excel连接好了,想删除其中的某一行,下面是代码。遇到的问题是,点删除button后,DataGridview上显示删掉了,可是Excel数据表里还是原来数据。。并没有被删除。。大家能帮帮忙吗?谢谢了!Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click      
        Dim loginconn As New OleDb.OleDbConnection
        Dim strsql As String
        Dim fName As String
        fName = "c:\SCOR\1 Top Level\Top Level.xls"
        loginconn.ConnectionString = ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fName & ";Extended Properties=Excel 8.0")
        strsql = "delete * from [sheet1$] where No ='" & TextBox1.Text.Trim & "'"
        Dim cmdlogin As New OleDb.OleDbCommand(strsql, loginconn)
        loginconn.Open()
        cmdlogin.ExecuteScalar()
        Dim loginread As OleDb.OleDbDataReader = cmdlogin.ExecuteScalar                 
        Dim delrow As DataGridViewRow
        For Each delrow In DataGridView1.SelectedRows
            DataGridView1.Rows.Remove(delrow)
        Next
        MsgBox("delete record successfully!", MsgBoxStyle.Information, "delete record")
End Sub

解决方案 »

  1.   

    你删除的是No ='" & TextBox1.Text.Trim & "'的数据和DataGridView1.SelectedRows无关  
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  2.   


    "delete * from [sheet1$] where No ='" & TextBox1.Text.Trim & "'"你的TextBox1 绑定显示的当前选定单元格的数据是吗?那么如果有多列的时候,你选定的还是NO这一列吗?
      

  3.   

    loginconn.CursorLocation = adUseClient
    loginconn.Open
    loginconn.Execute strsql
      

  4.   

    To AisaC : 对,我点哪一行,textbox1上就会显示那一行的数据。
      

  5.   

    To feiyun0112:这样不行吗?可以点哪行就在textbox1显示数据的。那请问下,怎么实现点哪行就删除那一行呢?
    谢谢大家的帮忙!
      

  6.   

            Dim delrow As DataGridViewRow
            For Each delrow In DataGridView1.SelectedRows
    strsql = "delete * from [sheet1$] where No ='" & delrow.cells(NoCol) & "'"
            Dim cmdlogin As New OleDb.OleDbCommand(strsql, loginconn)
            loginconn.Open()
            cmdlogin.ExecuteScalar()            DataGridView1.Rows.Remove(delrow)
            Next
    NoCol是你对应NO的列
      

  7.   

    delete * from [sheet1$] where No ='" & TextBox1.Text.Trim & 为什么delete后要加*??
      

  8.   

    好像记得通过数据库链接的方式是无法彻底删除 Excel 中的行。
      

  9.   

    啊,这怎么办?。。之前我做了个listview连接Access好像可以删的。根据同样的原理做这个就遇到上述问题了~
    能帮帮忙吗?
      

  10.   

    可以改用将需要保留的数据复制到空白的工作表中实现;也可以直接引用 Excel 对象进行行的删除。
      

  11.   

    直接引用 Excel 对象进行行的删除 怎么做?呵呵 能给些代码吗?谢谢了!
      

  12.   

    '引用 Microsoft Excel ##.0 Object Library
    Private Sub Command1_Click()
        Dim xApp As Excel.Application
        Dim xWB As Excel.Workbook
        
        Set xApp = New Excel.Application
        Set xWB = xApp.Workbooks.Open("c:\SCOR\1 Top Level\Top Level.xls")
        
        xWB.Worksheets("Sheet1").Rows("3:3").Delete xlUp
        
        xWB.Save
        xWB.Close
        Set xWB = Nothing
        
        xApp.Quit
        Set xApp = Nothing
    End Sub
      

  13.   

    谢谢Tiger的方法。有个问题:delete 后面xlUp是什么?
    我把xlup删掉后运行,可以删除行,但是不是点哪个删除哪个。它是自己按顺序删除的。
    另外能解释下3:3是什么意思吗?十分感谢!
      

  14.   

    xlUp的意思是行删除后下面的行自动上移填补上,Rows("3:3")表示第3行
      

  15.   

    你把程序打包之后,独立去运行,不要在调试的时候去运行,直接运行生成的exe文件
    因为你调试运行的时候,操作的是debug目录下的xls文件.所以你C盘下的文件是没有修改的
      

  16.   

    qingye.谢谢你的建议~
    tiger,可能是我没表达清楚。我说的意思是,点哪行就删哪行,怎么有那个点的事件?呵
      

  17.   

    你原先不就是在 Button6_Click 中进行的删除?
    只是删除的方式不同而已。
      

  18.   

    对啊,就是有click这个事件。可是不知道为什么就不是删的我点的那个。。郁闷。
    还有,我试了下用Access,用sql的delete语句做。可以删除。可就是用Excel总不行。总是错误:不可识别的数据库格式
    这能算做是VB的一个缺陷吗?
      

  19.   

    Excel 本身不是数据库,文件格式有多种版本。
    估计你的 Office 版本高了,保存的文件格式与 ConnectionString 指定格式不一致。开发语言是工具,不具备人工智能,缺陷在你自己身上。
      

  20.   


    呵,感谢大家的指导。恩tiger说的对。还是要自己找方法咯~ 
    (分已经不重要了吧。。能给的分就这么点。。)