при работе с ретранслятором вы объявляете новый текстовый текст для каждого элемента данных? - PullRequest
1 голос
/ 27 августа 2009

это не правильно

Private Sub drop_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles iqty.ItemDataBound
    If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
        Dim row As allowanceQtyQuery = CType(e.Item.DataItem, allowanceQtyQuery)

        Dim unit = CType(e.Item.FindControl("Unit"), DropDownList)
        Using db As New myContext
            Dim u = db.getAllUnit(True)
            unit.DataSource = u
            unit.DataTextField = "descen"
            unit.DataValueField = "unitid"
            unit.DataBind()
        End Using
        unit.Text = row.Unit
    End If
End Sub

потому что, если я скажу 1000 наименований, он объявит 1000-кратный текст данных

как бы вы справились с этим?

создал это, чтобы иметь возможность удалить часть "using db"

Public ReadOnly Property listOfUnit() As List(Of Unit)
    Get
        If HttpContext.Current.Cache("unit") Is Nothing Then
            Using db As New ODSTS
                HttpContext.Current.Cache.Insert("unit", db.getAllUnit(True).ToList, Nothing, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(5))
            End Using
        End If
        Return CType(HttpContext.Current.Cache("unit"), List(Of Unit))
    End Get
End Property

Ответы [ 2 ]

1 голос
/ 27 августа 2009

Как я понял, вы ничего не делаете, особенно со своим текстом данных, так почему бы вам не кэшировать его в поле и использовать в вашем методе?

Вы можете сделать что-то вроде:

Private Sub drop_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles iqty.ItemDataBound
    If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
        Dim row As allowanceQtyQuery = CType(e.Item.DataItem, allowanceQtyQuery)
        Dim unit = CType(e.Item.FindControl("Unit"), DropDownList)
            unit.DataSource = getDataContextPriv.getAllUnit(True)
            unit.DataTextField = "descen"
            unit.DataValueField = "unitid"
            unit.DataBind()
        unit.Text = row.Unit
    End If
End Sub

Protected Sub Page_Unload(ByVal Sender as Object, ByVal e as EventArgs)
    _myContext.Dispose()
End Sub

Private _myContext as DataContext
Private Property getDataContextPriv() As DataContext
        Get
            If(_myContext is Nothing) Then
                _myContext = new myContext()
            End If
            return _myContext
        End Get
End Property
1 голос
/ 27 августа 2009

Кэшируйте результирующий набор из БД в виде DataTable, List или чего-либо еще в переменную члена класса и связывайте каждый выпадающий список, таким образом, только один раз попадете в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...