Как получить новые значения при редактировании вида сетки? - PullRequest
1 голос
/ 14 декабря 2011

Я пытаюсь обновить некоторые записи в моей таблице, используя Шаблоны элементов GridView . Это так:

<asp:GridView ID="grdCursos" runat="server" CssClass="grdTable" 
                AutoGenerateColumns="False" DataKeyNames="CourseID">
                <Columns>
                    <asp:TemplateField HeaderText="ID" Visible="false">
                        <ItemTemplate>
                            <asp:Label ID="lblID" runat="server" Text='<%#Bind("[CourseID]") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Nome">
                        <EditItemTemplate>
                            <asp:TextBox ID="txtCourseName" runat="server" Text='<%#Bind("[CourseName]") %>' Width="50"></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="lblCourseName" runat="server" Text='<%#Bind("[CourseName]") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="# de Questões">
                        <EditItemTemplate>
                            <asp:TextBox ID="txtMaxQuestions" runat="server" Text='<%#Bind("[CourseMaxQuestions]") %>' Width="20"></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="lblMaxQuestions" runat="server" Text='<%#Bind("[CourseMaxQuestions]") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Data de atribuição">
                        <ItemTemplate>
                            <asp:Label ID="lblCourseSince" runat="server" 
                                Text='<%#Bind("[CourseSince]","{0:d}") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Nome do arquivo">
                        <EditItemTemplate>
                            <asp:FileUpload ID="fileCourse" runat="server"/>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="lblCourse" runat="server" Text='<%#Bind("[CourseFileName]") %>'></asp:Label>
                        </ItemTemplate>
                        <ItemStyle Width="200px" />
                    </asp:TemplateField>
                    <asp:CommandField ButtonType="Image" EditImageUrl="~/site/edit.jpg" 
                        ShowEditButton="True" DeleteImageUrl="~/site/cancel.jpg" 
                        UpdateImageUrl="~/site/accept.jpg" CancelImageUrl="~/site/cancel.jpg" 
                        ShowDeleteButton="True" CancelText="Cancelar" DeleteText="Inativar" 
                        EditText="Editar" UpdateText="Atualizar"></asp:CommandField>
                    <asp:CommandField ShowEditButton="True" />
                </Columns>

Как только я нажимаю Редактировать ссылку , некоторые из столбцов моего GriView становятся TextBox, который я могу редактировать. Затем, когда я нажимаю кнопку обновления, он вызывает мой метод grdCursos_RowUpdating. Проблема в том, что я не могу получить новые значения , которые пользователь дал в качестве ввода. Я вызываю MsgBox, чтобы показать значения, которые я хочу обновить, и он показывает только старые значения.

Это мой метод:

Protected Sub grdCursos_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles grdCursos.RowUpdating
    Dim updatingRow As GridViewRow = grdCursos.Rows(e.RowIndex) 'Recupera a linha que está sendo editada

    'Recupera os dados cadastrados
    Dim ID As Label = updatingRow.FindControl("lblID")
    Dim txtCourseName As TextBox = updatingRow.FindControl("txtCourseName")
    Dim txtMaxQuestions As TextBox = updatingRow.FindControl("txtMaxQuestions")
    Dim CourseFile As FileUpload = updatingRow.FindControl("fileCourse")

    MsgBox(String.Format("ID={0}, Nome do curso={1}, # de questoes={2}, Nome do arquivo={3}", ID.Text, txtCourseName.Text, txtMaxQuestions.Text, CourseFile.FileName))
    Exit Sub
    ....

Как я могу получить новые значения?

1 Ответ

1 голос
/ 14 декабря 2011

Краткий ответ: e.NewValues

С MSDN :

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

Используйте свойство NewValues ​​(словарь) для доступа к значениям исправлены неключевые поля в строке для обновления.

Свойство NewValues ​​автоматически заполняется именем / значением пары пересмотренных неключевых полей в строке. Отдельная запись добавлено в свойство NewValues ​​для каждого неключевого поля в строке.

Чтобы определить имя поля записи, используйте DictionaryEntry.Key свойство объекта System.Collections.DictionaryEntry, содержащегося в словарь NewValues. Чтобы определить стоимость записи, используйте Свойство DictionaryEntry.Value.

Примечание

Поле первичного ключа или поля не включены в этот словарь. Чтобы получить доступ к значениям поля первичного ключа или полей, используйте клавиши имущество. Чтобы получить доступ к исходным значениям неключевых полей в строка, используйте свойство OldValues ​​.

Пример:

Sub CustomersGridView_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)

    ' Use the CopyTo method to copy the DictionaryEntry objects in the 
    ' NewValues collection to an array.
    Dim records(e.NewValues.Count - 1) As DictionaryEntry
    e.NewValues.CopyTo(records, 0)

    ' Iterate through the array and HTML encode all user-provided values 
    ' before updating the data source.
    Dim entry As DictionaryEntry
    For Each entry In records

      e.NewValues(entry.Key) = Server.HtmlEncode(entry.Value.ToString())

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