如何在编辑gridview时获取新值?

时间:2011-12-14 17:45:00

标签: asp.net .net vb.net gridview

我正在尝试使用 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 个答案:

答案 0 :(得分:1)

答案简短: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