Ошибка привязки DataTable к элементу управления ASP.Net GridView - PullRequest
0 голосов
/ 02 марта 2012

Я пытаюсь разрешить моим пользователям вводить большие списки данных с помощью элемента управления ASP.Net GridView.Влияние, которое я пытаюсь создать, состоит в том, чтобы заставить элемент управления GridView действовать как электронная таблица.Пользователь может свободно вводить данные и вкладки от столбца к столбцу и строки к строке.Пользователь может использовать кнопку внизу страницы, чтобы добавлять строки по мере необходимости.Внизу формы также есть кнопка для сохранения по мере необходимости.

Для этого я создал DataTable с кучей пустых строк и связал его с GridView.Столбцы GridView являются столбцами шаблонов, которые содержат текстовые поля.Итак, когда страница открывается, она на самом деле выглядит как электронная таблица.Когда пользователь нажимает кнопку «Добавить строки», я просто добавляю еще десять строк в таблицу данных, к которой привязан GridView, и она работает как чудо.

Проблема, с которой я сталкиваюсь, заключается в чтении данных, которые пользовательпоступил.Когда пользователь нажимает на пейджинговую ссылку или кнопку обновления, я хотел бы обновить DataTable данными, введенными пользователем. Вот что у меня есть.

Private Sub UpdateDataTable()
    Dim objCatRow As clsCategoriesRow = Session("gvCategoriesRow")
    Dim drQuery() As DataRow = Nothing
    Dim drRow As DataRow = Nothing
    Dim objRow As GridViewRow = Nothing
    Dim intRecNo As Integer = 0
    Dim txt As TextBox = Nothing
    Dim lbl As Label = Nothing

    'Loop through all of the rows in the grid view control
    For Each objRow In Me.gvCategories.Rows
        'Get the label that contains the identity column
        lbl = objRow.Cells(GridColumns.Category).FindControl("lblItemRecNo")
        intRecNo = lbl.Text

        'Update the datarow bound to this grid view row
        'First, query the datarow from the data table
        drQuery = objCatRow.Table.Select("recno = " & intRecNo)
        'Make sure our query returned a row
        If Not IsNothing(drQuery) AndAlso drQuery.Count > 0 Then

            'Get the value from the textbox in the grid view
            txt = objRow.Cells(GridColumns.Category).FindControl("txtItemCategory")
            'Upadte the data row with the value the user entered
            'THE VALUE IN txt.Text IS EMPTY. HOW CAN I GET THE VALUE THE USER TYPED IN?

            drQuery(0)("Category") = txt.Text
            'Get the value from the textbox in the grid view
            txt = objRow.Cells(GridColumns.SortORder).FindControl("txtItemSortOrder")
            'Upadte the data row with the value the user entered
            drQuery(0)("sortorder") = txt.Text
        End If
    Next

End Sub

Проблема в том, что это не возвращаетчто набрал пользователь. Строка

txt = objRow.Cells (GridColumns.Category) .FindControl ("txtItemCategory")

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

Как получить значение, введенное пользователем в сетку?

Я хочуупомянуть, что я знаю, как добавить кнопки EDIT и UPDATE в каждую строку.Я бы хотел избежать этого, если смогу.У моих пользователей есть огромные списки данных для входа, и такой подход сделает приложение непригодным для использования.

Заранее спасибо,

Майк

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

Данные формы, размещенные пользователем, находятся в коллекции Page.Request.Form.Item. В Page.Request.Form.AllKeys перечислены «ключи», связанные со всеми значениями элемента формы.

If Page.Request.Form.HasKeys Then
For Each key as String In Page.Request.Form.AllKeys
' step through the keys and use Page.Request.Form.Item(key) to get the data entered
Next
end If

После тестирования я смог получить данные из данных Request.Form или элемента управления GridView во время page.load при обратной передаче, если вы не привязываете элемент управления при обратной передаче, а только во время первоначального запроса ( "ПОЛУЧИТЬ").

Имейте в виду, элементы управления должны быть заново созданы для каждого запроса к странице. Размещенные данные запроса используются ASP.NET для повторного заполнения элементов управления данными формы только после повторного создания элементов управления на странице и обработки ViewState для элементов управления и т. Д.

Request.Form collection Жизненный цикл страницы ASP.NET

0 голосов
/ 02 марта 2012

Вы должны заменить это:

txt = objRow.Cells(GridColumns.Category).FindControl("txtItemCategory")

на это

txt = objRow.Cells(GridColumns.Category).FindControl("txtItemCategory").Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...