为什么展开的嵌套GridView会崩溃并且不会保留ViewState? [英] Why is the expanded nested GridView collapses and does not retain ViewState?

查看:60
本文介绍了为什么展开的嵌套GridView会崩溃并且不会保留ViewState?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在UpdatePanel中有以下GridView:

< asp:GridView ShowHeaderWhenEmpty = false AlternatingRowStyle-BackColor = #EBE9E9 AutoGenerateColumns = false OnSorting = yourTasksGV_Sorting AllowSorting = true ID = yourTasksGV runat < span class =code-keyword> = server ClientIDMode = 静态 EmptyDataText = 您目前拥有没有分配给您的任务 OnRowDataBound = yourTasksGV_RowDataBound OnRowCreated = yourTasksGV_RowCreated >
< >
< asp:TemplateField >
< ; ItemTemplate >
< asp:ImageButton ID = imgExpCol ImageUrl = 〜/ theImages / subTaskPlus.png runat = server < span class =code-attribute> ClientIDMode = 静态 CssClass = imgExpCol AlternateText = plus CommandArgument =' <% #Eval( Object% > ' OnCommand = imgExpCol_Command / >
< ; asp:Panel ID = pnlSubTasks runat = server CssClass = pnlSubTasks ClientIDMode = 静态 >
< asp:GridView ID = gvSubTasks runat = server AutoGenerateColumns = false ClientIDMode = 静态 >
< >
< asp:BoundField DataField = 任务名称 HeaderText = 任务名称 / >
< asp:BoundField DataField = 截止日期 HeaderText = 截止日期 /
>
< /列 >
< / asp:GridView >
< / asp:Panel >
< / ItemTemplate >
< / asp:TemplateField >
< asp:HyperLinkField 钽rget = _ self DataNavigateUrlFields = 任务明细 < span class =code-attribute> DataTextField = 任务名称 DataNavigateUrlFormatString = HeaderText = 任务明细 SortExpression = 任务名称 它emStyle-CssClass = taskTableColumn / >
< asp:TemplateField >
< ItemTemplate >
< asp:ImageButton ImageUrl = 〜/ theImages / Dependencies.png CssClass = gvTaskDep btnShowDepend runat = server ID = < span class =code-keyword> btnShowDepend OnCommand = btnShowDepend_Command CommandName = TaskDepend AlternateText =' <% #Eval( 对象)+ + Eval( FK%> ' CommandArgument =' <% #Eval( 对象)+ + Eval( FK%> ' 工具提示 = 点击查看依赖关系 / >
< / ItemTemplate >
< / asp:TemplateField >
< asp: BoundField DataField = 服务 HeaderText = 服务 SortExpression = 服务 ItemStyle-CssClass = taskTableColumn / >
< asp:BoundField DataField = 状态 HeaderText = 状态 < span class =code-attribute> SortExpression = 状态 ItemStyle-CssClass = taskTableColumn / >
< asp:BoundField DataField = 截止日期 HeaderText = 到期 < span class =code-attribute> SortExpression = 截止日期 ItemStyle-CssClass = taskTableColumn / > ;
< asp:BoundField DataField < span class =code-keyword> = 所有者 HeaderText = 所有者 SortExpression = 所有者 ItemStyle-CssClass = taskTableColumn / >
< asp:BoundField DataField = 客户端 HeaderText = 客户端 SortExpression = 客户端 ItemStyle-CssClass = taskTableColumn / >
< asp:BoundField DataField = 网站 HeaderText = 网站 SortExpression = 网站 ItemStyle-CssClass = taskTableColumn / >
< asp:BoundField < span class =code-attribute> DataField = Practice HeaderText = 练习 SortExpression = 实践 ItemStyle-CssClass = taskTableColumn / >
< asp:BoundField DataField = < span class =code-keyword>提供者 HeaderText = 提供商 SortExpression = 提供商 ItemStyle-CssClass = taskTableColumn / >
< asp:BoundField DataField = 角色 HeaderText = 角色 < span class =code-attribute> SortExpression = 角色 ItemStyle-CssClass = taskTableColumn / >
< < span class =code-leadattribute> asp:BoundField DataField = 对象 HeaderText = 对象 SortExpression = 对象 < span class =code-attribute> ItemStyle-CssClass = hideTag HeaderStyle-CssClass = hideTag / >
< asp:BoundField DataField = FK HeaderText = FK SortExpression = 对象 ItemStyle-CssClass = hideTag HeaderStyle-CssClass = hideTag / >
< /列 >
< / asp:GridView >

JQuery(使用每行的子数据折叠和展开嵌套的GridView):

< pre lang = Javascript > $(function(){
$(body)。on('click',input [alt ='plus'],function(){
alert(test );
$(this).closest(tr)。after(< tr > < td > < / td > < td colspan =' 999' > + $(this).next()。html()+< span class =code-keyword>< / td > < / tr >
$(this).at tr(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();
});
});



以上代码工作正常,如果我点击父GridView中的加号图标,则显示嵌套的GridView,减号图标为显示。但是几秒钟之后,它就会自动崩溃。



RowDataBound代码隐藏:



< pre lang =c#> protected void yourTasksGV_RowDataBound( object sender,GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{


#region
列表< string> lstSubTask = new List< string>();

string strQuerySubTasks = @ SELECT
CT.OBJECTID'对象ID'
,ATTR2888'子任务名称'
,M.MEMO'子任务详情'
,ATTR2890'状态'
,ST .FK2898'父任务对象ID'
,CT.ATTR2739'父任务名''
来自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 + ';

使用(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 ;
}
// 隐藏加号按钮
}
else
{
GridView gvOrders = e.Row.FindControl( gvSubTasks as GridView;
gvOrders.DataSource = RunSubTaskQuery();
gvOrders.DataBind();

TasksUpdatePanel.Update();
}
}}



如何修复它以便嵌套的GridView在视图中直到点击减号图标?

解决方案

(function(){


(body)。on('click',input [alt ='plus'] ,function(){
alert(test);


(this).closest(tr)。after(< tr > < ; td > < / td > < td colspan =' 999' > +


I have the following GridView inside an UpdatePanel:

<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 (which collapse and expands the nested GridView with the sub data from each row):

<pre lang="Javascript">$(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();
    });
});


The above code works fine, where if I click the plus icon in the parent GridView, the nested GridView is shown and the minus icon is displayed. But after a few seconds, it just collapses by itself.

RowDataBound code-behind:

protected void yourTasksGV_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {


        #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
        }
                else
                {
                     GridView gvOrders = e.Row.FindControl("gvSubTasks") as GridView;
             gvOrders.DataSource = RunSubTaskQuery();
             gvOrders.DataBind();

             TasksUpdatePanel.Update();
                }
} }


How do I fix it so that the nested GridView is in view until the minus icon is clicked?

解决方案

(function () {


("body").on('click', "input[alt='plus']", function () { alert("test");


(this).closest("tr").after("<tr><td></td><td colspan = '999'>" +


这篇关于为什么展开的嵌套GridView会崩溃并且不会保留ViewState?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆