Gridview 列在回发时发生变化
Gridview Columns change on postback
我正在 asp.net 使用 visual web developer 2010 开发我的网站。我有一个在线商店的产品页面,其中显示产品图片,gridview 显示有关产品的信息,那里每个产品都有多个列。
我为此页面设置代码的方式是我有 autogeneratecolumns = true(出于特定原因),主要是因为我从许多不同的表和数百种不同的产品和类别中动态提取 gridview 数据。这一切都很好,直到我将 "Add To Cart" 按钮添加到 gridview 中,这样每一行都有一个按钮。
因为我将 autogeneratecolumns 设置为 true,当我插入我的 "Add To Cart" 按钮时,none 列已创建,因此该按钮显示在第一列,然后是其余列数据。我有一段代码在预渲染阶段运行,它采用按钮列并将其移动到最后一列。这就是问题所在。
出于某种原因,即使我将所有这些预呈现代码都放在 if not postback 中,当在页面上单击另一张图片并且页面执行回发时,我的列 headers 会发生变化并且 "Add To Cart" 列不再存在,这会产生问题。在我单击另一张图片之前列的示例是(订单号、描述、价格、添加到购物车)和在我单击图片之后(颜色、度数、描述、价格)。就好像它仍然是 运行 Gridview 预渲染,即使它显示它在调试期间跳过了该代码块。这是代码...
Protected Sub GridView1_PreRender(ByVal sender As Object, ByVal e As EventArgs)
Dim GridView1 As GridView = FormView1.FindControl("GridView1")
If Not IsPostBack Then
For Each row As GridViewRow In GridView1.Controls(0).Controls
Dim tc As TableCell = row.Cells(0)
row.Cells.Add(tc)
Next
Else
End If
End Sub
Protected Sub ImageButton3_Click1(sender As Object, e As System.Web.UI.ImageClickEventArgs)
Dim img As System.Web.UI.WebControls.Image = FormView1.FindControl("Image1")
Dim img1 As ImageButton = FormView1.FindControl("ImageButton3")
Dim url As String = img.ImageUrl
img.ImageUrl = img1.ImageUrl
img1.ImageUrl = url
End Sub
我知道是这段代码导致的,因为我删除了代码并且一切正常,但是这段代码是我能想到的唯一解决方案,可以将购物车按钮列移动到网格视图。对于这个非常长的问题,我们深表歉意,但对于如何防止我的列在单击图像按钮时发生更改或移动的任何帮助,我们将不胜感激。
以为我会继续 post 我做了什么来阻止这个问题。我从来没有弄清楚到底是什么导致了这个问题,但我最终在我的所有图像周围添加了一个更新面板,这似乎解决了这个问题。
我正在 asp.net 使用 visual web developer 2010 开发我的网站。我有一个在线商店的产品页面,其中显示产品图片,gridview 显示有关产品的信息,那里每个产品都有多个列。
我为此页面设置代码的方式是我有 autogeneratecolumns = true(出于特定原因),主要是因为我从许多不同的表和数百种不同的产品和类别中动态提取 gridview 数据。这一切都很好,直到我将 "Add To Cart" 按钮添加到 gridview 中,这样每一行都有一个按钮。
因为我将 autogeneratecolumns 设置为 true,当我插入我的 "Add To Cart" 按钮时,none 列已创建,因此该按钮显示在第一列,然后是其余列数据。我有一段代码在预渲染阶段运行,它采用按钮列并将其移动到最后一列。这就是问题所在。
出于某种原因,即使我将所有这些预呈现代码都放在 if not postback 中,当在页面上单击另一张图片并且页面执行回发时,我的列 headers 会发生变化并且 "Add To Cart" 列不再存在,这会产生问题。在我单击另一张图片之前列的示例是(订单号、描述、价格、添加到购物车)和在我单击图片之后(颜色、度数、描述、价格)。就好像它仍然是 运行 Gridview 预渲染,即使它显示它在调试期间跳过了该代码块。这是代码...
Protected Sub GridView1_PreRender(ByVal sender As Object, ByVal e As EventArgs)
Dim GridView1 As GridView = FormView1.FindControl("GridView1")
If Not IsPostBack Then
For Each row As GridViewRow In GridView1.Controls(0).Controls
Dim tc As TableCell = row.Cells(0)
row.Cells.Add(tc)
Next
Else
End If
End Sub
Protected Sub ImageButton3_Click1(sender As Object, e As System.Web.UI.ImageClickEventArgs)
Dim img As System.Web.UI.WebControls.Image = FormView1.FindControl("Image1")
Dim img1 As ImageButton = FormView1.FindControl("ImageButton3")
Dim url As String = img.ImageUrl
img.ImageUrl = img1.ImageUrl
img1.ImageUrl = url
End Sub
我知道是这段代码导致的,因为我删除了代码并且一切正常,但是这段代码是我能想到的唯一解决方案,可以将购物车按钮列移动到网格视图。对于这个非常长的问题,我们深表歉意,但对于如何防止我的列在单击图像按钮时发生更改或移动的任何帮助,我们将不胜感激。
以为我会继续 post 我做了什么来阻止这个问题。我从来没有弄清楚到底是什么导致了这个问题,但我最终在我的所有图像周围添加了一个更新面板,这似乎解决了这个问题。