item_databound发射两次

时间:2015-12-25 10:58:15

标签: asp.net vb.net

提前感谢您,如果之前已经回复过,请原谅。

我想显示记录数。我在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语

2 个答案:

答案 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