Asp.net 以编程方式创建GridView,但单击更新时回发会阻止调用行更新
我只是有个问题,我希望有人能给我一些建议。我有一个asp页面,它根据从数据库检索到的一组变量值,通过编程在同一个aspx页面上创建多个GridView 由于我在代码隐藏中以编程方式创建GridView,因此每次加载页面、回发、oninit等时,我都必须创建GridView GridView。我当前在页面的oninit函数中创建GridView。除了用户进入行编辑模式,然后单击更新(行更新)按钮/链接外,这一切都可以正常工作。这将强制在网格上进行回发,从而在网格值更新之前从数据库重新加载网格值,从而防止RowUpdate事件启动。我该怎么做?我曾尝试捕获通过RowCommand事件选择的命令,但此事件仅在回发后触发,因此在RowCommand之前首先调用oninit函数,因此我捕获的命令名对我没有什么用处 我在Oninit函数中创建GridView,如下所示Asp.net 以编程方式创建GridView,但单击更新时回发会阻止调用行更新,asp.net,ajax,gridview,postback,Asp.net,Ajax,Gridview,Postback,我只是有个问题,我希望有人能给我一些建议。我有一个asp页面,它根据从数据库检索到的一组变量值,通过编程在同一个aspx页面上创建多个GridView 由于我在代码隐藏中以编程方式创建GridView,因此每次加载页面、回发、oninit等时,我都必须创建GridView GridView。我当前在页面的oninit函数中创建GridView。除了用户进入行编辑模式,然后单击更新(行更新)按钮/链接外,这一切都可以正常工作。这将强制在网格上进行回发,从而在网格值更新之前从数据库重新加载网格值,从
GridViewLineItem = New GridView
If bEnableEdit = True Then
GridViewLineItem.AutoGenerateEditButton = True
End If
If bEnableDelete = True Then
GridViewLineItem.AutoGenerateDeleteButton = True
End If
GridViewLineItem.AutoGenerateColumns = False
GridViewLineItem.EnableViewState = True
GridViewLineItem.Font.Name = "Arial"
GridViewLineItem.Font.Size = 8
GridViewLineItem.ForeColor = Drawing.Color.Black
GridViewLineItem.BackColor = Drawing.Color.White
GridViewLineItem.BorderColor = Drawing.Color.LightGray
GridViewLineItem.BorderStyle = BorderStyle.None
GridViewLineItem.BorderWidth = 1
GridViewLineItem.CellPadding = 4
GridViewLineItem.AlternatingRowStyle.BackColor = Drawing.Color.White
GridViewLineItem.FooterStyle.BackColor = Drawing.Color.BurlyWood
GridViewLineItem.HeaderStyle.BackColor = Drawing.Color.DarkGray
GridViewLineItem.HeaderStyle.Font.Bold = True
GridViewLineItem.HeaderStyle.ForeColor = Drawing.Color.Black
GridViewLineItem.PagerStyle.BackColor = Drawing.Color.Beige
GridViewLineItem.PagerStyle.ForeColor = Drawing.Color.Black
GridViewLineItem.PagerStyle.HorizontalAlign = HorizontalAlign.Right
GridViewLineItem.RowStyle.BackColor = Drawing.Color.Beige
GridViewLineItem.ID = "LineItemGridView" + strItemID
strCBItemID = strItemID
AddHandler GridViewLineItem.RowEditing, AddressOf GridViewLineItem_RowEditing
AddHandler GridViewLineItem.RowCancelingEdit, AddressOf GridViewLineItem_RowCancelingEdit
AddHandler GridViewLineItem.RowDataBound, AddressOf GridViewLineItem_RowDataBound
AddHandler GridViewLineItem.RowUpdating, AddressOf GridViewLineItem_RowUpdating
AddHandler GridViewLineItem.PageIndexChanging, AddressOf GridViewLineItem_PageIndexChanging
AddHandler GridViewLineItem.PreRender, AddressOf GridViewLineItem_PreRender
AddHandler GridViewLineItem.PageIndexChanged, AddressOf GridViewLineItem_PageIndexChanged
AddHandler GridViewLineItem.RowDeleting, AddressOf GridViewLineItem_OnDeleting
AddHandler GridViewLineItem.RowCommand, AddressOf GridViewLineItem_RowCommand
'bind data source
dt = New DataTable
oda = New OleDb.OleDbDataAdapter
oda.Fill(dt, rsGroup)
GridViewLineItem.DataSource = dt
GridViewLineItem.DataBind()
'Add gridview to page
tCell.Controls.Add(GridViewLineItem)
tRow.Cells.Add(tCell)
TableLineItem.Rows.Add(tRow)
LineItemPanel.Controls.Add(TableLineItem)
LineItemPanel.BorderStyle = BorderStyle.Solid
LineItemPanel.BorderWidth = 3
LineItemPanel.BorderColor = Drawing.Color.DarkGray
tGroupRow = New TableRow
tGroupCell = New TableCell
tGroupCell.ColumnSpan = TableGroupDetails.Rows.Item(0).Cells.Count
tGroupCell.Controls.Add(LineItemPanel)
tGroupRow.Cells.Add(tGroupCell)
TableGroupDetails.Rows.Add(tGroupRow)
有人能告诉我当用户点击行更新时,我应该如何跳过gridview的数据绑定吗?我不能不加区别地将Gridview的数据绑定绑定到页面上。IsPostback=false如果我这样做,网格将只加载一次,而其他有效的PostSback(例如,当用户单击进入行编辑模式时)将导致空网格
谢谢
万分感谢!将GridView绑定移动到Page.PreRender解决了此问题。我的事件流过去是Page.Oninit(在运行时创建gridview的地方)->Page.Load(gridview绑定)->gridview.rowUpdate(我提交对数据库的更改的地方)。现在是Page.OnInit(gridview创建)->gridview.rowUpdate(提交对数据库的更改)->Page.PreRender(绑定gridview的位置)。不过现在唯一的问题是,我正在通过iTemplate为gridview的编辑模式渲染一个ajaxcombobox。调用GridView.RowUpdate事件时,用户对此的选择将丢失。所有其他字段(如文本框)保留用户输入值。我将进一步深入研究这一点,看看我能找到什么
另外,由于某些原因,我不能在你的帖子下发表评论
p.p.S修复了gridview编辑模式下Ajax组合框的问题。必须将enableviewstate设置为true
将AjaxComb设置为新的AjaxControlToolkit.ComboBox
AjaxComb.EnableViewState=True
这有点奇怪。。。您可能会认为它的默认值为true…在回发事件处理例程之后,在
页面上绑定GridView。LoadComplete
或页面。PreRender
事件。您还可以尝试让GridView使用DataSourceID和一些DataSourceControl绑定自身。在页面上绑定GridView。加载完成或页面。在回发事件处理例程之后,预呈现事件。您还可以尝试让GridView与DataSourceID和一些DataSourceControl绑定。我已经对我的web表单做了进一步的更改。我现在通过OnInit函数在运行时创建Gridview,并绑定到页面加载上的数据集。现在,这将触发RowUpdate事件,但是,当单击gridview中的Update按钮/链接时发生的回发仍然会导致从数据库重新加载数据并覆盖userinput的回发,因此,当我尝试解析gridview中的行值时,我最终会得到用户更改前的值。如何检测何时单击更新以防止重新加载?在Gridview中单击更新链接/按钮时,aspx执行两次回发,第一次是在单击后立即回发。第一次回发发生在任何GridView事件触发之前。在第一次回发之后,aspx将触发OnInit和Page_load事件,这些事件将重新创建并重新加载我的gridview。GridView的RowUpdate事件只触发这两个函数,所有这些都太迟了,因为此时所有用户输入都已丢失。有人有什么建议吗?我已经对我的网页表单做了进一步的修改。我现在通过OnInit函数在运行时创建Gridview,并绑定到页面加载上的数据集。现在,这将触发RowUpdate事件,但是,当单击gridview中的Update按钮/链接时发生的回发仍然会导致从数据库重新加载数据并覆盖userinput的回发,因此,当我尝试解析gridview中的行值时,我最终会得到用户更改前的值。如何检测何时单击更新以防止重新加载?在Gridview中单击更新链接/按钮时,aspx执行两次回发,第一次是在单击后立即回发。第一次回发发生在任何GridView事件触发之前。在第一次回发之后,aspx将触发OnInit和Page_load事件,这些事件将重新创建并重新加载我的gridview。GridView的RowUpdate事件只触发这两个函数,所有这些都太迟了,因为此时所有用户输入都已丢失。有人有什么建议吗?