javascript - 使用 jQuery 在 ASP.NET GridView 拖放中面临问题

标签 javascript jquery asp.net gridview tablednd

希望有人能帮我解决这个问题。 我有一个 ASP.NET gridview,其中 DataKeyName 具有 GridView 的主键。

我需要拖放此网格行,以便用户可以在 GridView 中对顺序进行排序。 我可以通过添加以下代码来进行 gridview 拖放。

$(document).ready(function () {
            $("#GridView1").tableDnD();
        });

但是我在获取更新的行顺序以便更新数据库中的此顺序时遇到问题。 即当我使用 tableDnD tableDnDSerialize() 时,它总是返回 null onDrop:

function (table, row) {
   alert($('#GridView1').tableDnDSerialize());
}

返回:GridView1[]=&GridView1[]=

请帮助我。

最佳答案

您需要在 GridView 上提供键值的行 ID。这可以在 OnRowDataBound 事件中轻松完成。 在你的头脑中链接你的 JavaScript 文件。 jquery.tablednd.js 来自 2014 年 10 月 30 日

<script src="js/jquery-1.11.1.js" type="text/javascript"></script>
<script src="js/jquery.color.js" type="text/javascript"></script>
<script src="js/jquery.tablednd.js" type="text/javascript"></script>

编写页面 JavaScript。将 gvDevConfig 替换为 GridView 的名称。利用您自己的 ajax 例程使用新订单来更新数据库。将 ctl00_indexPH_gvDevConfig 替换为 GridView 的服务器 ID。如果不在PlaceHolder内,您可以alert($.tableDnD.serialize());查看序列化正在传递的内容,并替换除数值之外的所有值,以分号分隔。

<script type="text/javascript" language="javascript">
    function ActivateGrid() {
        $("#<%=gvDevConfig.ClientID%>").tableDnD({
            onDragClass: "highlight",
            onDrop: function (table, row) {
                $(row).animate({ backgroundColor: "#ffff99" }, 1000).animate({ backgroundColor: "white" }, 3500);
                var values = $.tableDnD.serialize().replace(/&/gi, ";").replace(/%5B%5D/gi, "").replace(/ctl00_indexPH_gvDevConfig=/gi, "");
                $.ajax({ type: "GET", url: "xml/ajax_spacers.aspx", async: true, data: "DevOrder=" + values, success: function (t) {
                    $(".jqOrderResults").html("Order Saved");
                } 
                });
            }
        });
    }
</script>

向页眉和页脚添加类,以防止拖放到其位置。创建一个 OnRowDataBound 事件来激活此功能并为每行分配一个 Key。请注意,此 GridView 包含在 UpdatePanel 中,并在页面上有一个 asp:ScriptManager。使用您自己的 SqlDataSource 或进程来填充 GridView。

<asp:GridView ID="gvDevConfig" runat="server" DataSourceID="dsDevConfig" DataKeyNames="DevConfigurationID"
    Width="795" CssClass="gvDevCfg" BorderStyle="None" GridLines="None" AutoGenerateColumns="false"
    UseAccessibleHeader="false" OnRowDataBound="gvDevConfig_RDB" ShowFooter="true"
    OnRowCommand="AddNewRecord">
    <HeaderStyle CssClass="dgHead nodrop nodrag" />
    <RowStyle VerticalAlign="Top" />
    <AlternatingRowStyle VerticalAlign="Top" />
    <FooterStyle CssClass="NewMaterialEntry nodrop nodrag" VerticalAlign="Top" HorizontalAlign="Center" />
    <Columns>
        <asp:Your Columns Here />
    </Columns>
</asp:GridView>

OnRowDataBound 的代码隐藏。将 DevConfigurationID 更新为您的关键字段。一旦网格渲染其数据并到达页脚,就会调用 JavaScript 来初始化 DnD 功能

protected void gvDevConfig_RDB(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (!((e.Row.RowState & DataControlRowState.Edit) > 0))
        {
            e.Row.Attributes.Add("id", DataBinder.Eval(e.Row.DataItem, "DevConfigurationID").ToString());
            e.Row.Attributes["ondblclick"] = ClientScript.GetPostBackClientHyperlink(((LinkButton)(e.Row.FindControl("lbEdit"))), "", false);
        }
    }
    else if (e.Row.RowType == DataControlRowType.Footer)
    {
        ScriptManager.RegisterStartupScript(((GridView)sender), this.GetType(), "ResetGrid", "<script type='text/javascript'>ActivateGrid();</script>", false);
    }
}

这是我的 ajax 例程,它使用要更新的表的键值来增加订单。您必须根据您的逻辑进行调整,并且肯定会对您的查询字符串进行更多错误和值检查。

private void UpdateDevOrder()
{
    string keyValues = ValueOf.QueryString("DevOrder");

    try
    {
        string[] RowData = keyValues.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
        int NewOrder = 1;

        for (int i = 0; i < RowData.Length; i++)
        {
            string DevConfigurationID = RowData[i];
            DB.Update("DevelopmentConfig", "DisplayOrder=" + NewOrder.ToString(), "DevConfigurationID=" + DevConfigurationID);
            NewOrder++;
        }
        Response.Write("Order Saved");
    }
    catch (Exception ex)
    {
        audit.Audit(ex.Message, "Exception Error", Request.Url.AbsolutePath, "Xml Command", "UpdateDevOrder()");
        Response.Write("Failed");
    }
}

关于javascript - 使用 jQuery 在 ASP.NET GridView 拖放中面临问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5980959/

相关文章:

javascript - jQuery - 隐藏一个特定的 div 直到另一个被点击,当 div 悬停时再次隐藏那个 div

jquery - 如何用jquery动画显示隐藏的div?

javascript - Bing map v8 未加载 IE11

javascript - 我应该在哪里实现 Polymer 中的一般功能?

javascript - 无法从 jquery 选项卡小部件中删除 tabIndex

c# - 将值从 C# asp.net 传递到 JAVASCRIPT 不起作用

asp.net - 删除列后,Gridview 丢失 ItemTemplate

asp.net - 在 ASP.NET Core 中注册 ControllerModel 的操作

javascript - Chrome : window. print() 打印对话框仅在页面重新加载后打开 (javascript)

javascript - For 循环和 jquery 音乐播放器