Кэширование данных поиска в приложении winforms - PullRequest
0 голосов
/ 15 марта 2020

У меня есть приложение winforms в VB, в котором есть много справочных таблиц и учетная таблица (обновляется только один раз в неделю), где данные не изменяются часто или никогда. У меня есть набранный набор данных в моем приложении. Я хочу иметь возможность загрузить таблицы поиска один раз и использовать его в любом месте моего приложения, не заполняя его в каждой форме. Одна из таблиц - это список сотрудников (обновляется только один раз в неделю). Имеет 10k + строк. Я пытаюсь загрузить таблицу регистрации при запуске приложения, чтобы ее можно было использовать во время сеанса приложения. Я искал способ сделать это. Я столкнулся с кэшированием, используя asp. net, или способ system.caching, или создав общий / stati c. Я не могу понять, как лучше всего подойти к этому или даже с чего начать.

Я пока ничего не пробовал, кроме поиска решения. Мне не удалось найти полное решение, так как я не понимаю большую его часть.

Я знаю, что это не полностью отформатированный вопрос, пожалуйста, прости меня.

Редактировать: По комментариям ниже, я пытался это в событиях приложения:

Public rstrtbl As New TaRRDataSet.TSTAFFRSTRDataTable

Private Sub my_startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
    Dim ta As New TaRRDataSetTableAdapters.TSTAFFRSTRTableAdapter
    rstrtbl = ta.GetData()
End Sub

Затем в моей форме я отправил источник данных элемента управления в my.application.rstrtbl.

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Вот как я бы это сделал:

Imports Microsoft.VisualBasic.ApplicationServices

Namespace My
    ' The following events are available for MyApplication:
    ' Startup: Raised when the application starts, before the startup form is created.
    ' Shutdown: Raised after all application forms are closed.  This event is not raised if the application terminates abnormally.
    ' UnhandledException: Raised if the application encounters an unhandled exception.
    ' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 
    ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.

    Partial Friend Class MyApplication

        Private _staffRosterTable As TaRRDataSet.TSTAFFRSTRDataTable

        Public ReadOnly Property StaffRosterTable As TaRRDataSet.TSTAFFRSTRDataTable
            Get
                Return _staffRosterTable
            End Get
        End Property

        Private Sub MyApplication_Startup(sender As Object, e As StartupEventArgs) Handles Me.Startup
            Using adapter As New TaRRDataSetTableAdapters.TSTAFFRSTRTableAdapter
                _staffRosterTable = adapter.GetData()
            End Using
        End Sub

    End Class

End Namespace

Подходящее место, разумное имя и свойство только для чтения. Затем вы можете получить доступ к этой таблице, используя My.Application.StaffRosterTable в любом месте вашего проекта. Как я уже сказал, делать это не обязательно, но это логично.

Обратите внимание, что я также использовал панель навигации в верхней части окна кода для генерации обработчика событий, поэтому он также использует разумный, стандартный name.

EDIT:

Если вы хотите использовать отложенную загрузку, которая не была частью исходного вопроса, то вы можете сделать что-то вроде этого:

Imports Microsoft.VisualBasic.ApplicationServices

Namespace My
    ' The following events are available for MyApplication:
    ' Startup: Raised when the application starts, before the startup form is created.
    ' Shutdown: Raised after all application forms are closed.  This event is not raised if the application terminates abnormally.
    ' UnhandledException: Raised if the application encounters an unhandled exception.
    ' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 
    ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.

    Partial Friend Class MyApplication

        Private _staffRosterTable As TaRRDataSet.TSTAFFRSTRDataTable

        Public ReadOnly Property StaffRosterTable As TaRRDataSet.TSTAFFRSTRDataTable
            Get
                If _staffRosterTable Is Nothing
                    Using adapter As New TaRRDataSetTableAdapters.TSTAFFRSTRTableAdapter
                        _staffRosterTable = adapter.GetData()
                    End Using
                End If

                Return _staffRosterTable
            End Get
        End Property

    End Class

End Namespace
1 голос
/ 16 марта 2020

Вы можете сделать это с помощью модуля в VB. Добавьте модуль в свой проект, например, так:

Module Globals

  Public employeeRosterTable As employeeRosterTableType

End Module

, а затем где-нибудь в своем стартовом коде (например, событие загрузки вашей стартовой формы, или после входа в систему, или где угодно), вы можете создать & заполните его.

Поскольку он находится в модуле, он доступен для всего вашего проекта.

...