JT1992 Ответов: 1

Создание глобальной переменной для копирования datatable из одной функции не показывает данные при вызове другой функции. Не знаю почему!


Я загружаю электронную таблицу excel в gridview с помощью datatable и сохраняю данные excel в datatable. однако из-за разбиения на страницы я не могу получить имя каждой строки в моем столбце gridview, когда я использую
(GridView1.Rows(i).Cells(x).Text.ToString
я делаю свойство arraylist. add для каждой строки в столбце 1, однако отображается только первая страница, но не остальные. Кроме того, когда я добавляю datatable в объект класса глобальной переменной, который также является datatable, он не может прочитать его в другой функции. Я не уверен, почему это происходит.
Public Class GlobalVariable
    Public Shared Dttbl As New DataTable
End Class

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        Call loadExcel()
        Call callGlobalVariable()
    End If
End Sub

 Public Function loadExcel()
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
Dim taskTable As New DataTable

Dim filePath = Path.Combine(GlobalVariable.savedPath, GlobalVariable.excelFileName)

'Code to Use an Oledb Connection to get data from the Excel File
If File.Exists(filePath) Then
    MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & ";Extended Properties='Excel 12.0 Xml;HDR=YES;';")
    MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)
    MyCommand.Fill(taskTable)
    'Persist the table in the Session object.
    'Below is what i am doing to copy the task table globally so i can use it in a function call. HOWEVER IT DOESN't Show in another function call. not sure why. 
    GlobalVariable.Dttbl = taskTable.Copy
    Session("TaskTable") = taskTable

    'Bind data to the GridView control.
    BindData()
    MyConnection.Close()
Return Nothing
End Function

еще одна функция, которую я создаю вот так, и я пытаюсь вызвать globalvariable

Public Function callGlobalVariable()
'The below shows up empty i am not sure why. But it is able to read above in the loadExcel() function. 
GlobalVariable.Dttbl.Rows(0).ItemArray(0).ToString()
Return Nothing
End Function


Что я уже пробовал:

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

Tomas Takac

Вы не показываете код, связанный с тем, о чем вы говорите. Вы должны разместить свой код в поле "что я пробовал". Пожалуйста, используйте Улучшить вопрос кнопка для этого.

JT1992

сожалеть об этом. я пытаюсь создать переменную, которая является глобальной и использует вещи в поле what have i tried. Спасибо!

1 Ответов

Рейтинг:
7

Dave Kreskowiak

Если вы считаете, что вам нужно создать "глобальную переменную" (которой нет в .NET), вам действительно нужно переосмыслить свой дизайн. Глобальная переменная, которую вы описываете, никуда вас не приведет и не решит вашу проблему.

HTTP не имеет состояния. Это означает, что следующий запрос, который приходит, вообще ничего не помнит из предыдущего запроса. Данных Excel не существует. Веб-серверы страдают амнезией. Они не помнят, о чем вы только что говорили в последнем запросе.

Итак, вам нужны две части. Во-первых, вы должны хранить загруженную книгу Excel где-то и иметь ее уникальную идентификацию, чтобы ее можно было найти при следующем запросе из некоторых данных в этом запросе. Это значение идентификатора должно быть отправлено обратно клиенту любым подходящим для вашей ситуации способом.

Следующая часть - это ваш код для обработки запроса сетки для страницы. Этот запрос должен передать идентификатор используемой книги Excel, размер нужной страницы данных (количество строк) и страницу, которую нужно вернуть. Затем этот код должен был бы получить данные из листа Excel на основе этих данных и вернуть соответствующую страницу данных. Помните, что ничего из предыдущего запроса не запоминается/не загружается.


JT1992

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