在Visual Studio.Net 里如何绑定数据到DataGrid呀
我刚开始学习在Visual Studio.Net里开发Asp.Net程序,但一开始就碰到一个问题,就是解决不了,希望各位给以解答。
我在Visual Studio.Net使用DataGrid的属性生成器绑定到DataSet的
,此DataSet是使用OleDbDataAdapter自动生成,但运行时DataGrid◆只显示标题行,不显示纪录◆,我保证我的SQL没问题,在OleDbDataAdapter预览数据数据也有记录的。不知道VS.Net自动生成的代码处理了什么?
我加入了如下代码,依然不起作用:
Private Sub Page_Load(...) Handles MyBase.Load
'在此处放置初始化页的用户代码
'下面这一行Fill对吗?可是也没什么效果
OleDbDataAdapter1.Fill(DataSet21, "MyTable1")
DataGrid1.DataSource = DataSet21.Tables( "MyTable1 ").DefaultView
DataGrid1.DataBind()
End Sub
有时还显示:表已被独占打开,或没有访问数据库的权限。
——我使用的是Access数据库,没有任何安全性设置的。
◆另外,我将使用NotePad编辑的一个listbox.aspx添加到vs.net项目里,原来运行正常的页面也是一条记录都不显示,怪怪怪!!!!!!!!
代码如下:
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Data" %>
<%@ Page Language="vb" Runat="Server" ContentType="text/html" ResponseEncoding="gb2312" CodeBehind="ListBox.aspx.vb" AutoEventWireup="false" Inherits="ams.ListBox" %>
<HTML>
<HEAD>
<title>无标题文档</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<body>
<form runat="server">
<asp:listbox ID="lbxEmployees" runat="server" AutoPostBack="true" Rows="10" OnSelectedIndexChanged="subListChange" />
<hr>
<asp:datagrid ID="dgEmployee" runat="server" />
</form>
<script language="VB" runat="server">
Sub Page_Load(Source as Object, E as EventArgs)
If Not IsPostBack Then
Dim strConnection as String = ConfigurationSettings.AppSettings("NWind")
Dim strSQLforListBox as String = "Select (姓氏 + 名字) as 姓名,雇员ID " & _
"From 雇员 Order by 姓氏"
Dim objConnection as New OleDbConnection(strConnection)
Dim objCommand as New OleDbCommand(strSQLforListBox, objConnection)
objConnection.Open()
lbxEmployees.DataSource = objCommand.ExecuteReader()
lbxEmployees.DataTextField = "姓名"
lbxEmployees.DataValueField = "雇员ID"
lbxEmployees.DataBind()
objConnection.Close()
End If
End Sub
Sub subListChange(Source as Object, E as EventArgs)
'Response.Write("subListChange triggered")
Dim strConnection as String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\test\NorthWind.mdb;Persist Security Info=False"
Dim strSQLforGrid as String = "Select 雇员ID, 姓氏, 名字, 尊称, 职务, 城市, 地址, 邮政编码 " & _
"From 雇员 Where 雇员ID = " & _
lbxEmployees.SelectedItem.Value
Dim objConnection as New OleDbConnection(strConnection)
Dim objCommand as New OleDbCommand(strSQLforGrid, objConnection)
objConnection.Open()
dgEmployee.DataSource = objCommand.ExecuteReader()
dgEmployee.DataBind()
objConnection.Close()
End Sub
</script>
</body>
</HTML>
问题点数:0、回复次数:13Top
1 楼BabyTree(小树)回复于 2003-08-01 08:22:34 得分 0
在ACCESS2000中数据库是不是已经打开!Top
2 楼xinyu_1980(心雨)回复于 2003-08-01 09:02:56 得分 0
问题应该出在
dgEmployee.DataSource = objCommand.ExecuteReader()
这一句上.
objCommand.ExecuteReader()只返回一个Reader
要通过Reader.read才能获取数据.
Top
3 楼Fortune2k1(Forune2k1)回复于 2003-08-01 09:12:02 得分 0
Private Sub Page_Load(...) Handles MyBase.Load
'在此处放置初始化页的用户代码
'下面这一行Fill对吗?可是也没什么效果
OleDbDataAdapter1.Fill(DataSet21, "MyTable1")
DataGrid1.DataSource = DataSet21.Tables( "MyTable1 ").DefaultView ''''''''''''''''''''''''''''''''''多一空格你.
DataGrid1.DataBind()
End Sub
改成:
Private Sub Page_Load(...) Handles MyBase.Load
if not ispostback then
'在此处放置初始化页的用户代码
'下面这一行Fill对吗?可是也没什么效果
OleDbDataAdapter1.Fill(DataSet21, "MyTable1")
DataGrid1.DataSource = DataSet21.Tables( "MyTable1 ").DefaultView
DataGrid1.DataBind()
end if
End SubTop
4 楼Fortune2k1(Forune2k1)回复于 2003-08-01 09:19:13 得分 0
objCommand.ExecuteReader()
第一次执行这句话,指向BOF
dim dr as New SqlClient.SqlDataReader
dr=cmd.executereader '当前指向BOF,即上溢出.
dim rowRhett as new row
rowRhett=dr.read '指向第一条记录.Top
5 楼goody9807(http://goody9807.cnblogs.com)回复于 2003-08-01 09:26:54 得分 0
Function bind(ByVal dg As DataGrid, ByVal t_name As String)
Dim dad As OleDbDataAdapter
Dim dadstr As String
Dim dtb As DataTable
Dim con As OleDbConnection
Dim str As String
Dim rid As Int64
Dim drow As DataRow
Dim dst As New DataSet()
rid = Session("residentid")
str = session("constr")
con = New OleDbConnection(str)
dadstr = "select * from " + t_name + " where residentid=" + CStr(rid)
dad = New OleDbDataAdapter(dadstr, con)
dad.Fill(dst, t_name)
dg.DataSource = dst
dg.DataBind()
End FunctionTop
6 楼nighting1029(一个人的日子)回复于 2003-08-01 09:32:11 得分 0
Private Sub Page_Load(...) Handles MyBase.Load
'在此处放置初始化页的用户代码
'下面这一行Fill对吗?可是也没什么效果
OleDbDataAdapter1.Fill(DataSet21, "MyTable1")
DataGrid1.DataSource = DataSet21.Tables( "MyTable1 ").DefaultView
DataGrid1.DataBind()
End Sub
这段代码在我这里是这样的
sqlDataAdapter1.Fill(dataSet11);
DataGrid1.DataBind();
好象这样就可以了。第二个问题也想请教,我的机子上试运行language="c#",好象常提示说没有这个那个库,什么都能运行Top
7 楼nice90(我爱射雕,更爱蓉儿)回复于 2003-08-01 09:36:06 得分 0
dgEmployee.DataSource = DataSet21.Tables( "MyTable1 ").DefaultView ''''''''''''''''''''''''''''''''''多一空格你.
dgEmployee.DataBind()Top
8 楼sailor76(快乐的水手)回复于 2003-08-01 20:25:24 得分 0
BabyTree(小树):我的access数据库保证没有打开.之所以出现这个错误,我想可能是VS.net生成的代码已经打开了这个数据库.
____________________________________________
To:Fortune2k1(Forune2k1) and nice90(我爱射雕,更爱蓉儿)
那个空格是拷贝的时候不知怎么增加的,源代码并没有错.
____________________________________________
xinyu_1980(心雨) :objCommand.ExecuteReader()也没有问题,因为如果这段代码不是在vs.net下面,运行是正常的
____________________________________________
nighting1029(hehe):sqlDataAdapter1.Fill()方法有六个重载的形式,你的和我的都是对的.
____________________________________________
◆还有熟悉VS.Net的吗?我想知道的是VS.net在后面作了什么,我又需要做些什么
Top
9 楼debug2003(DEBUG)回复于 2003-08-01 21:16:42 得分 0
关注 我也正在开始学习
Top
10 楼sailor76(快乐的水手)回复于 2003-08-02 19:45:35 得分 0
向上顶一顶Top
11 楼panyee(快乐王子)回复于 2003-08-02 20:26:37 得分 0
分区是否ntfs? 对access所在文件和目录, aspnet用户要有权读写
Top
12 楼yjtc(灵长目)回复于 2003-08-02 21:44:10 得分 0
up
|================|
|先天性缺乏人民币|
|================|
Top
13 楼sailor76(快乐的水手)回复于 2003-08-08 12:34:48 得分 0
SQL Server的问题已经解决,但Access的错误依旧。
SQL Server出错是因为自动生成的ConnectionString中没有包含密码的缘故。
可Access 就奇怪了,仍然提示“表已被独占打开,或没有访问数据库的权限”。我保证对Access数据库的目录拥有任何权限Top




