将搜索结果DataReader邦定到DateGrid1
        Dim dr As SqlDataReader
        dr = CommSearch.ExecuteReader
        DateGrid1.DataSource = dr
        DateGrid1..DataBind()我想在搜索结果DataReader为空时,不显示ButSearch这个Button
        Dim dr As SqlDataReader
        If dr.Read() Then
            dr = CommSearch.ExecuteReader
            DateGrid1.DataSource = dr
            DateGrid1..DataBind()
        Else
            ButSearch.Visible = False
        End If
为什么加了dr.Read() 这个判断后,如果当搜索结果只有一条记录,在DateGrid1就不显示出来了呢,请问这种写法错在那里,该怎样写!

解决方案 »

  1.   

    DateGrid1..DataBind() //怎么两个点
    dr = CommSearch.ExecuteReader //这里后面应该带个括号的吧?
      

  2.   

    两个点是多打了一个,
    dr = CommSearch.ExecuteReader()在文件中就是这样写的
      

  3.   

    因为你执行了dr.Read()后,DataReader把你唯一的一条记录读过了,于是去读下一条,但是你只有一条记录所以DataReader读不到数据为空,所以DataGrid1不显示出来,
      

  4.   

    DataReader是向前只读的数据,dr.Read()被执行后只有一条记录被读取
      

  5.   

    应该用while判断,然后把DateGrid1.DataSource = dr DateGrid1..DataBind()这两句写到while外面才对吧
      

  6.   

    用DataView 绑定不就行了,我都这样的,也不知道好不好,总之好判断有没有值,也不会第一条记录不显示的现象
      

  7.   

    你在dr.Read()的时候,这个dr里面还根本什么东西都没有啊,你是在if之外只对它进行初始化啊.
    你应当把dr = CommSearch.ExecuteReader这一句移到if外面来才可以.
    Dim dr As SqlDataReader
    dr = CommSearch.ExecuteReader
    If dr.Read() Then
        DateGrid1.DataSource = dr
        DateGrid1..DataBind()
    Else
        ButSearch.Visible = False
    End If
      

  8.   

    hchxxzx正解

    移出来肯定就好咯.
      

  9.   

    DataReader 是向前只读的数据,DataReader中不能嵌套使用DataReader
      

  10.   

    我查看了一下READ(),是不能这样判断,请问该怎样判断DataReader有没值呢?
    xinyu_1980(心雨)说的用dr.Hasrows,查了一下帮助说:此命名空间、类或成员仅在 .NET Framework 1.1 版中受支持。
      

  11.   

    请问该怎样判断DataReader有没值呢==============>DataReader只是一个数据读取器而已,它本身没有数据,当调用它的Read()方法时它就向前读一次数据,直到记录末尾,用Read()方法是可以判断有没有数据可读的,但这样判断过后这条数据也就被读过去了,你没办法再绑定到DataGrid上,所以你的情况应该用DataTable。