Asp.net Gridview行更新事件未触发
我有一个带有Asp.net Gridview行更新事件未触发,asp.net,events,gridview,viewstate,Asp.net,Events,Gridview,Viewstate,我有一个带有AutoGenerateColumns=“False”的Gridview 我使用TemplateField在GridView的第一列中的相应ItemTemplate和EditItemTemplate字段中显示编辑、更新和取消“按钮” 在ItemTemplate中,我有一个命令名为“Edit”的ImageButtong。这正如预期的那样工作,我可以在RowCommand事件处理程序中放置一个断点来查看“event”命令名。单击后,回发将该行置于编辑模式。所有文本框都会按原样显示 此时,
AutoGenerateColumns=“False”
的Gridview我使用TemplateField在GridView的第一列中的相应ItemTemplate和EditItemTemplate字段中显示编辑、更新和取消“按钮” 在ItemTemplate中,我有一个命令名为“Edit”的ImageButtong。这正如预期的那样工作,我可以在RowCommand事件处理程序中放置一个断点来查看“event”命令名。单击后,回发将该行置于编辑模式。所有文本框都会按原样显示 此时,将显示上面的EditItemTemplate,其中包含两个ImageButton。一个是
CommandName=“Update”
,另一个是“Cancel”
我的问题在于单击Update ImageButton会发回,但不会触发RowCommand或RowUpdate事件
我已经在GridView标记中设置了必要的属性。(注意,在gridview中,EnableViewState=“False”
——如果我将其设置为True,我将得到标准值
“无法加载viewstate。控件树…”等。错误)
我注意到的一件奇怪的事情使我认为这是ViewState问题,那就是如果我将Update按钮的CommandName更改为“Edit”,则回发事件确实会在RowCommand事件中捕获
欢迎提出任何建议。谢谢。如果您将命令名称更改为“update”,您将必须在row命令中处理更新,这应该不是问题-对吗 已添加
您可以做的事情是将commandname更改为您想要的任何名称,并在Rowcommand中处理它。使用row命令手动更新/插入数据库。Sean 我知道你现在已经有了答案,但是对于将来的引用,你必须创建一个addhandler和一个委托来完成你想做的事情。起初我误解了这个问题。但是,如果您选择不使用命令字段,您将执行以下操作 //这在pageload中
If Not IsPostBack Then
'Create new column for Edit buttons
'Dim field As New TemplateField
Dim actionfield As New TemplateField
actionfield.HeaderText = "Action"
Dim actioncol As DataControlField = actionfield
GridView1.Columns.Insert(8, actioncol)//the eight is the column number of where you are adding the column. below you will add the button. You really don't need to add this column programmtically. I normally do though.
End If
//rowcreated
If e.Row.RowType <> DataControlRowType.footer Then
btnedit.ToolTip = "Edits the Current Record"
btnedit.ImageUrl = "\images\bttnEditMini.gif"
GridView1.Rows(i).Cells(8).Controls.Add(btnedit)
btnedit.CommandName = "view"//notice commandname. You can manipulate it.
btnedit.CommandArgument = GridView1.Rows(i).Cells(0).Text
AddHandler btnedit.Click, AddressOf btnedit_Click
end if
我删除了母版页,并让包含GridView的页面从该页面继承,它成功了。我的继承堆栈中的某些内容(或MS控件中的某些内容)无法按我设置的方式工作。这解决了我的问题:
If Not Master.Page.IsPostBackEventControlRegistered Then
'logic to bind data
End If
我在Gridview的编辑、更新、取消中也有同样的问题。“编辑”和“取消”事件被触发,但从不更新事件。最后,我将编辑模板字段中更新链接的CauseValidation更改为false。它出人意料地工作良好。正如亚欧会议和罗恩所指出的,在CommandField中添加CausesValidation=“false”属性解决了问题。
原因是我在页面上有一些其他验证控件,而在GridView更新页面上启动了其他验证控件,因此我认为最好设置ValidationSummary属性。将GridView EnableViewState属性设置为true 在本页的其他回答中提到,错误是由验证引起的。原因是页面上有一些验证器,这些验证器很可能不适用于正在编辑的特定行,无论出于何种原因,它们都没有被满足。如果希望验证器为当前正在编辑的行工作,则不希望将CausesValidation设置为false。。。相反,您将希望禁用任何不相关的验证器,但出于编辑此行的目的您关心的验证器除外
我的“编辑”按钮导致其他验证(尽管是隐藏的弹出窗口)在幕后执行 通过阅读解决方案,我正在寻找标准的
CausesValidation=“false”
属性来解决问题。我无法找到该字段,因为我似乎在使用AutoGenerateEditButton=“True”
将编辑按钮添加到gridview
我的解决方案如下,我希望这也能帮你节省一些宝贵的时间
AutoGenerateEditButton=“False”
,这样您可以通过ASP代码添加此字段<asp:commandfield showeditbutton="true" causesvalidation="false" headertext="Edit"/>
如果验证是个问题,您现在可以看到更新模块按预期启动。如果您使用任何函数从数据库检索(绑定)网格视图,并在page_Load()事件中调用它,则可能会导致此问题。尝试在page\u LoadComplete()事件中调用此函数,它将工作。嗨,Eric-不幸的是,当Update ImageButton的命令名不是“Edit”时,不会触发Row命令。。。我不认为正在为回发创建EditItemTemplate ImageButtons来注册它们,这样就不会引发它们的事件,或者gridview正在被重新绑定,它们正在丢失。理想情况下,我正在寻找一个完整的工作示例,其中有用于此类场景的自定义按钮。谢谢Eric-我以为我有一个解决方案(请参见下面的“答案”),但意识到我需要TemplateFields而不是CommandField,因为我在页脚中有一个插入行。请忽略下面的答案…有没有人得到一个示例,他们用自己的模板字段替换CommandField(GridView函数的内置按钮)进行编辑?爆炸!我刚刚记得我需要TemplateField解决方案,因为我在页脚中还有一个插入行,并且要求页脚模板包含一个ImageButton。。。把我的头发拔出来!!请忽略sel
<asp:commandfield showeditbutton="true" causesvalidation="false" headertext="Edit"/>