为什么我的DATAGRID无法绑定到查询结果,请大侠指点一下,多谢了!!(急.....)

dreamice01 2008-04-28 10:23:07
我的WEB窗体上有一个文本框(contract_query),一个查询按钮(sub_query)和一个datagrid2

datagrid2在页面加载时,绑定了一个数据集中的一个数据表。

我想在用户在文本框中输入一个条件时,按下查询按钮可以实现查询的功能,但以下代码没法让DATAGRID2显示出最新的查询结果数据,不知道是什么原因,请多多指点!

Private Sub sub_query_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles sub_query.Click

Dim cn As SqlClient.SqlConnection = New SqlClient.SqlConnection("workstation id=WANGQIANG;packet size=4096;user id=sa;" & _
"password=120979120979;data source=WANGQIANG;persist security info=False;initial catalog=assessonline")

Dim sqlcmd As SqlClient.SqlCommand = New SqlClient.SqlCommand

Dim reader As SqlClient.SqlDataReader

With sqlcmd
.CommandText = "select * from contract_standard_comparison where 合同号='" & Trim(Me.contract_query.Text) & "'"
.CommandType = CommandType.Text
.Connection = cn
End With
cn.Open()
reader = sqlcmd.ExecuteReader()

DataGrid2.DataSource = reader

DataGrid2.DataBind()

End Sub
...全文
91 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Plougher 2008-04-29
  • 打赏
  • 举报
回复

楼主,把它改成下面的就可以了:

Private Sub sub_query_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles sub_query.Click

Dim cn As SqlClient.SqlConnection = New SqlClient.SqlConnection("workstation id=WANGQIANG;packet size=4096;user id=sa;" & _
"password=120979120979;data source=WANGQIANG;persist security info=False;initial catalog=assessonline")

Dim sqlcmd As SqlClient.SqlCommand = New SqlClient.SqlCommand
dim dt1 as new datatable
Dim reader As SqlClient.SqlDataReader
'添加dt1的列,跟取数的表列名数据差不多
dt1.Columns.add("col1")
dt1.Columns.add("col2")
dt1.Columns.add("col3")
……
dt1.Columns.add("coln")
With sqlcmd
.CommandText = "select * from contract_standard_comparison where 合同号='" & Trim(Me.contract_query.Text) & "'"
.CommandType = CommandType.Text
.Connection = cn
End With
cn.Open()
reader = sqlcmd.ExecuteReader()
while reader.read
dim dr as datarow
dr=dt1.newrow
dr("col1")=reader(0)
dr("col2")=reader(1)
dr("col3")=reader(2)
……
dr("coln")=reader(n)
dt1.rows.add(dr)
end while
reader.close
DataGrid2.DataSource = dt1
DataGrid2.DataBind()
End Sub
guoruixing 2008-04-29
  • 打赏
  • 举报
回复
DataGrid2.DataBind() 这句话去掉试试
pazzini 2008-04-29
  • 打赏
  • 举报
回复
DataReader不能作为数据源直接绑定到DataGrid上。

关于后面使用的DataTable,应该是可以绑定的,你可以用检查一下queryview的内容是否为空,有时候由于数据源为空,看上去像没有绑定上。

在DataGrid2.DataSource = queryview这一句插个断点,看看queryview是否为null。

dreamice01 2008-04-29
  • 打赏
  • 举报
回复
自己搞定了,原来用数据适配器也可以的,谢谢大家。
Roy 2008-04-29
  • 打赏
  • 举报
回复
下面和泽泻代码对你或许会有用哦!vb.net 2003
其中dgSData为DataGrid;其中,我连接的是Access 2003的Database,你根据自己的实际情况修改就可以,具体写法差不多了!
根据下面的这个应该是没有问题的了!希望对你有帮助.

Private Sub loadSortingData()
Public adapter As New OleDbDataAdapter '定义数据适配器'
Public oleConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\Data\AccessDB;")
Public dSet As DataSet '定义数据集'
Dim sql As String

Try
sql = "SELECT 栏位名 FROM 表名(Table) " 'SQL

adapter = New OleDbDataAdapter(sql, oleConn)

dSet = New DataSet

adapter.Fill(dSet, "R_SORTING_DATA") '往适配器中

dgSData.SetDataBinding(dSet, "表名(Table) ") '把datagrid控件绑定数据集'

Catch sqlExc As Exception
MessageBox.Show(sqlExc.ToString, "SQL 异常错误!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End Try
End Sub
dreamice01 2008-04-28
  • 打赏
  • 举报
回复
我把它改为以下代码,还是不行,无法更新DATAGRID中的数据,麻烦具体指点一下,谢谢!

Private Sub sub_query_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles sub_query.Click

Dim queryview As DataTable = Dtuser1.Tables("contract_standard_comparison")
queryview.Select("合同号='" & Trim(Me.contract_query.Text) & "'")

DataGrid2.DataSource = queryview
DataGrid2.DataBind()

End Sub
symbol441 2008-04-28
  • 打赏
  • 举报
回复
datareader是只读快速游标,读取完后必须马上关闭

不可以绑定到datagrid,建议使用dataset ,datatable

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧