2014-10-30 61 views
2

我正在使用Visual Studio 2010,VB.NET,目标框架.NET 4.0。当EditIndex设置在RowEditing上时,GridView不会更改为编辑模式

我有一个GridView,我绑定到一些对象集合,CommandField列应该允许编辑选定的行。

我在RowEditing eventhandler中正确设置EditIndex属性。

问题是:当我单击生成的“编辑”链接时,显然没有发生任何事情,该行在“查看模式”中再次呈现,而不是“编辑模式”。

但是,如果我做一些随机回发,就像点击我的“doNothing”按钮,该行就会在下一个回传中以“编辑模式”呈现。

我已成功地复制下面的代码的问题:

ASPX:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="MyForm.aspx.vb" Inherits="MySandBox.MyForm" %> 

<%@ Register Src="MyControl.ascx" TagName="MyControl" TagPrefix="uc1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:GridView ID="gvInfrator" runat="server" AutoGenerateColumns="false"> 
     <Columns> 
      <asp:CommandField ShowEditButton="true" /> 
      <asp:BoundField HeaderText="MyField" DataField="MyField" /> 
     </Columns> 
    </asp:GridView> 
    <asp:Button ID="btnDoNothing" runat="server" Text="Just do a postback" /> 
    </form> 
</body> 
</html> 

代码背后:

Public Class MyDto 
    Public Property MyField As String 
End Class 

Public Class MyForm 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Me.BindMyData() 
    End Sub 

    Private Sub BindMyData() 
     Dim myData As New MyDto 
     myData.MyField = "My field value" 

     Me.gvInfrator.DataSource = New MyDto() {myData} 
     Me.gvInfrator.DataBind() 
    End Sub 

    Protected Sub gvInfrator_RowEditing(sender As Object, e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles gvInfrator.RowEditing 
     Me.BindMyData() 

     Me.gvInfrator.EditIndex = e.NewEditIndex 
    End Sub 

End Class 

难道我做错了什么?这是.NET Framework 4中的错误吗?有什么解决方法吗?

+0

为您的数据绑定_设置'EditIndex'后。 – 2014-10-30 13:09:34

回答

2

您需要在之后绑定您的数据您设置了GridView的EditIndex

Protected Sub gvInfrator_RowEditing(sender As Object, e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles gvInfrator.RowEditing 
    Me.gvInfrator.EditIndex = e.NewEditIndex 
    Me.BindMyData() 
End Sub 
+0

非常感谢,这是它! – 2014-10-30 13:28:07

+2

没问题!欢迎来到StackOverflow。感谢您花时间写出一个好的,彻底的问题。 – 2014-10-30 13:35:04

相关问题