提前感谢您,如果之前已经回复过,请原谅。
我想显示记录数。我在item_databound中放了一个计数器,注意到计数器是显示的记录的两倍。
我有一个处理数据网格的数据访问层:
Case "DataGrid"
If Len(DataValueField) > 0 Then
Dim oDS As New DataSet
Dim oDV As New DataView
oDV = DataTable.DefaultView
oDV.Sort = DataValueField & " ASC"
oDS.Tables.Add(oDV.ToTable)
CType(WebControl, DataGrid).DataSource = oDS
CType(WebControl, DataGrid).DataBind()
Else
CType(WebControl, DataGrid).DataSource = _DataSet
CType(WebControl, DataGrid).DataBind()
End If
CType(WebControl, DataGrid).DataSource = _DataSet
CType(WebControl, DataGrid).DataBind()
如果我在页面本身使用此代码,则Item_Databound只运行一次:
Dim oDA As New SqlDataAdapter(SQL, _oConn)
Dim oDS As New DataSet
oDA.Fill(oDS)
grdUsers.DataSource = oDS
grdUsers.DataBind()
我在DAL中做错了两次导致射击的错误?
谢谢, Fudd语
答案 0 :(得分:0)
您的代码中存在明显问题。 在
If Len(DataValueField) > 0 Then
你是第一次用oDS绑定你的webcontrol。再次完成If语句之后,你再次使用_DataSet绑定webcontrol。 这背后的逻辑是什么?你想通过这个来实现什么?
答案 1 :(得分:0)
抱歉没有更清楚。当我使用数据集时,我只通过DataBound传递一次。使用该对象获取数据,它通过DataBound两次。这里有什么问题?谢谢。
以下是页面本身调用目标代码的代码:
Dim Query As New FencelineDAL.Query(_oConn)
Query.CommandText = "[SELECT statement]"
Query.DataBind(grdUsers)
这是我认为造成两次传球的对象:
Public Function DataBind() As Object
Select Case WebControl.GetType().Name
Case "DataGrid"
If Len(DataValueField) > 0 Then
Dim oDS As New DataSet
Dim oDV As New DataView
oDV = DataTable.DefaultView
oDV.Sort = DataValueField & " ASC"
oDS.Tables.Add(oDV.ToTable)
CType(WebControl, DataGrid).DataSource = oDS
CType(WebControl, DataGrid).DataBind()
Else
CType(WebControl, DataGrid).DataSource = _DataSet
CType(WebControl, DataGrid).DataBind()
End If
End Select
CType(WebControl, DataGrid).DataSource = _DataSet
CType(WebControl, DataGrid).DataBind()
Return Webcontrol