我在更新面板中有一个gridview(ASP.net)。我还有一个“保存”按钮 因此,当我单击“保存”时,它会循环遍历网格视图的所有行,并将数据传递给存储过程以更新每一行。这有点太慢,因为有时我会更新数据库,即使没有发生更改。
我决定在gridview中添加一个字段,如下所示:
<asp:TemplateField>
<ItemTemplate>
<input type="hidden" id="hdnIsChanged" runat="server" />
</ItemTemplate>
</asp:TemplateField>
也就是说,我添加了一个隐藏字段,其想法是如果我的gridview行中的文本框或下拉值发生了变化,我会用值1更新此隐藏字段。所以我将此添加到我的gvLineItems_RowDataBound
事件:
Dim hiddenField As HtmlInputHidden = DirectCast(e.Row.FindControl("hdnIsChanged"), HtmlInputHidden)
'the line item date
Dim tLID As TextBox = CType(e.Row.FindControl("txtLineItemDate"), TextBox)
tLID.Attributes.Add("onchange", "document.getElementById('" + hiddenField.ClientID + "').value=1")
'the amount field
Dim ta As TextBox = CType(e.Row.FindControl("txtAmount"), TextBox)
ta.Attributes.Add("onchange", "document.getElementById('" + hiddenField.ClientID + "').value=1")
这个想法是onchange它会设置值1.然后在我的保存按钮中我会做一些这样的事情:
For Each Row As GridViewRow In Me.gvLineItems.Rows
Dim hiddenField As HtmlInputHidden = DirectCast(Row.FindControl("hdnIsChanged"), HtmlInputHidden)
If (hiddenField.Value = "1") Then
'perform the update...
我遇到的问题是当我调试时,我发现hiddenField.Value
始终是1,无论我是否更改了文本框中的值。我发现了这个类似的帖子:http://forums.asp.net/t/1592125.aspx/1
这似乎适用于那个人,但对我而言,价值总是1 ......
答案 0 :(得分:1)
getElementById,小写最后一个D.
答案 1 :(得分:0)
它现在突然工作,似乎与任何与calendarextender(ajax)相关联的文本框都失败了。所以我摆脱了这个字段的rowdatabound,它现在起作用了......奇怪。