【问题标题】:Why does the expanded nested GridView automatically closes after opening it为什么展开的嵌套GridView打开后会自动关闭
【发布时间】:2014-09-10 15:35:56
【问题描述】:

我在 UpdatePanel 中有以下 GridView:

<asp:GridView ShowHeaderWhenEmpty="false" AlternatingRowStyle-BackColor="#EBE9E9" AutoGenerateColumns="false" OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="You currently have no tasks assigned to you" OnRowDataBound="yourTasksGV_RowDataBound" OnRowCreated="yourTasksGV_RowCreated">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:ImageButton ID="imgExpCol" ImageUrl="~/theImages/subTaskPlus.png" runat="server" ClientIDMode="Static" CssClass="imgExpCol" AlternateText="plus" CommandArgument='<%#Eval("Object") %>' OnCommand="imgExpCol_Command" />
                <asp:Panel ID="pnlSubTasks" runat="server" CssClass="pnlSubTasks" ClientIDMode="Static">
                    <asp:GridView ID="gvSubTasks" runat="server" AutoGenerateColumns="false" ClientIDMode="Static">
                        <Columns>
                            <asp:BoundField DataField="Task Name" HeaderText="Task Name" />
                            <asp:BoundField DataField="Due Date" HeaderText="Due Date" />
                        </Columns>
                    </asp:GridView>
                </asp:Panel>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:HyperLinkField Target="_self" DataNavigateUrlFields="Task Detail" DataTextField="Task Name" DataNavigateUrlFormatString="" HeaderText="Task Detail" SortExpression="Task Name" ItemStyle-CssClass="taskTableColumn" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:ImageButton ImageUrl="~/theImages/Dependencies.png" CssClass="gvTaskDep btnShowDepend" runat="server" ID="btnShowDepend" OnCommand="btnShowDepend_Command" CommandName="TaskDepend" AlternateText='<%#Eval("Object") + "," + Eval("FK") %>' CommandArgument='<%#Eval("Object") + "," + Eval("FK") %>' ToolTip="Click to view Dependencies" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Service" HeaderText="Service" SortExpression="Service" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Due Date" HeaderText="Due" SortExpression="Due Date" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Owner" HeaderText="Owner" SortExpression="Owner" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Client" HeaderText="Client" SortExpression="Client" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Site" HeaderText="Site" SortExpression="Site" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Practice" HeaderText="Practice" SortExpression="Practice" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Provider" HeaderText="Provider" SortExpression="Provider" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Roles" HeaderText="Roles" SortExpression="Roles" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Object" HeaderText="Object" SortExpression="Object" ItemStyle-CssClass="hideTag" HeaderStyle-CssClass="hideTag" />
        <asp:BoundField DataField="FK" HeaderText="FK" SortExpression="Object" ItemStyle-CssClass="hideTag" HeaderStyle-CssClass="hideTag" />
      </Columns>
</asp:GridView>

JQuery:

$(function () {
    $("body").on('click', "input[alt='plus']", function () {
        alert("test");
        $(this).closest("tr").after("<tr><td></td><td colspan = '999'>" + $(this).next().html() + "</td></tr>")
        $(this).attr("src", "../theImages/subTaskMinus.png");
        $(this).attr("alt", "minus");
    });
    $("body").on('click', "input[alt='minus']", function () {
        alert("test2");
        $(this).attr("src", "../theImages/subTaskPlus.png");
        $(this).attr("alt", "plus");
        $(this).closest("tr").next().remove();
    });
});

代码隐藏:

protected void yourTasksGV_RowDataBound(object sender, GridViewRowEventArgs e)

{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        GridView gvOrders = e.Row.FindControl("gvSubTasks") as GridView;
        gvOrders.DataSource = RunSubTaskQuery();
        gvOrders.DataBind();

        TasksUpdatePanel.Update();

        //BEGIN: FIGURE OUT WHICH ROW SHOULD HAVE THE PLUS ICON
        #region
        List<string> lstSubTask = new List<string>();

        string strQuerySubTasks = @"SELECT 
                CT.OBJECTID 'Object ID'
                ,ATTR2888 'Subtask Name'
                ,M.MEMO 'Subtask Details'
                ,ATTR2890 'Status'
                ,ST.FK2898 'Parent Task Object ID'
                ,CT.ATTR2739 'Parent Task Name'
            FROM HSI.RMOBJECTINSTANCE1244 ST
                INNER JOIN HSI.RMMEMO M ON ST.MK2889 = M.MEMOID
                INNER JOIN HSI.RMOBJECTINSTANCE1224 CT ON ST.FK2898 = CT.OBJECTID
            WHERE ST.ACTIVESTATUS = 0 AND CT.ACTIVESTATUS = 0 AND CT.OBJECTID = '" + objectid + "'";

        using (SqlConnection scSubTask = new SqlConnection(connString))
        {
            SqlCommand cmd = new SqlCommand(strQuerySubTasks, scSubTask);
            scSubTask.Open();

            SqlDataReader sdrST = cmd.ExecuteReader();

            if (!string.IsNullOrEmpty(objectid) && objectid != "&nbsp;")
            {
                while (sdrST.Read())
                {
                    lstSubTask.Add(sdrST[0].ToString().TrimEnd());
                }
            }

            sdrST.Close();
        }
        #endregion
        if (lstSubTask.Count == 0)
        {
            ImageButton ibExp = e.Row.FindControl("imgExpCol") as ImageButton;
            if (ibExp != null)
            {
                ibExp.Visible = false;
            }
            //hide the plus button
        }//END: FIGURE OUT WHICH ROW SHOULD HAVE THE PLUS ICON
    }
}

我遇到的问题是,当我单击加号按钮展开现有行以显示嵌套的 GridView 时,它会打开,但会在几秒钟后自行折叠,并且不会等待我手动关闭它。

我该如何解决?

【问题讨论】:

  • 由于您没有显示相关的 HTML,我们只能猜测。当您在浏览器中调试它时,您使用 jQuery 创建的单击处理程序是否被调用?如果是这样,它在哪里失败?如果不是,那么选择器可能与元素不匹配。
  • 我修改了代码/问题以询问我遇到的真正问题。对此感到抱歉。
  • 我看到你有 OnCommand="btnShowDepend_Command" CommandName="TaskDepend" ... 用于使用 jquery 展开/折叠的 ImageButton,你在该命令后面的代码中做了什么?
  • 是什么导致它崩溃? JavaScript 代码?回发到重置其状态的服务器?请描述您在调试时观察到的具体行为。
  • @DennisR 那是为了不同的功能。

标签: c# jquery asp.net gridview


【解决方案1】:

试试这样的..

    $("[src*=plus]").live("click", function () {
        $(this).closest("tr").after("<tr><td></td><td colspan = '999'>" + $(this).next().html() + "</td></tr>")
        $(this).attr("src", "../theImages/subTaskPlus.png");
    });
    $("[src*=minus]").live("click", function () {
        $(this).attr("src", "../theImages/subTaskMinus.png"");
        $(this).closest("tr").next().remove();
    });

我正在使用上面的 javascript 在 gridviews 中展开和折叠我的 gridviews。希望这对你有用。

【讨论】:

  • 我认为LIVE 已被弃用:/
  • 我删除了第二部分,它仍然在做。所以我认为导致问题的不是 JQuery,而是 GridView 的状态。 RowDataBound 让人耳目一新
  • 我不得不在onclick方法中return FALSE;,因为它是输入类型,它充当提交按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 2022-01-10
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多