我正在尝试使用 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
....
如何获取新值?
答案 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