多编辑/保存网格(hiddenfield+javascript)

Multi edit/save grid (hiddenfield + javascript)

本文关键字:hiddenfield+javascript 网格 保存 编辑      更新时间:2023-09-26

我得到了一个包含10行的网格视图,其中1列是可以编辑的组合框。当我点击"编辑"按钮时,所有10行都将变为可编辑行,我想跟踪我更改了哪些行,这样,如果只对其中2行进行了更改,我就不会将所有10行保存到DB中。到目前为止我的难题:

在网格中创建一个额外的隐藏列(就像一个复选框,告诉行已编辑)在组合框上的SelectedIndexChanged上,我将找到一个脚本,该脚本告诉我当前编辑的网格行,并在该行的隐藏列中设置选中标记

然后,当我按下"保存"时,我可以浏览网格的行,看看哪些行有复选标记,然后将这些行保存到DB

Javascript不是我的强项,所以任何帮助/提示都将不胜感激,或者一个完全不同的解决方案也会起作用:)

我的解决方案:添加了<input type="hidden" id="hdnIsChanged" runat="server" />在网格的ItemTemplate中

然后在RowDataBound的网格中,我找到了hiddenField
Dim hdnField As HtmlInputHidden = DirectCast(e.Row.FindControl("hdnIsChanged"), HtmlInputHidden)

和下拉列表
Dim ddlTest As DropDownList = CType(e.Row.FindControl("ddlTest"), DropDownList)ddlTest.Attributes.Add("onChange", "Test('" + hdnField.ClientID + "');")

<script type="text/javascript">
function Test(hiddenField) {
    var test = document.getElementById(hiddenField)
        test.value = "1"
}
</script>

最后,我可以浏览网格的行,看看哪些行发生了变化:

For Each r As GridViewRow In gvTest.Rows
    Dim hdnField As HtmlInputHidden = DirectCast(r.FindControl("hdnIsChanged"), HtmlInputHidden)
    If hdnField.Value = "1" Then
        // do updates
        End If
Next