PageIndexChanged 事件后嵌套网格不会保持展开状态
Nested grid does not stay expanded after PageIndexChanged event
我想弄清楚如何在移动到下一页后保持嵌套网格展开。
这是我的标记:
<asp:ScriptManager ID="scriptMger" runat="server"></asp:ScriptManager>
<asp:GridView ID="UserGroupGridView" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<a href="javascript:DivExpandCollapse('div<%# Eval("GroupID")%>');">
<img id="imgdiv<%# Eval("GroupID")%>" alt="" width="25px" border="0" src="Images/plus.png" /> </a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="GroupID">
<ItemTemplate>
<asp:Label ID="uggvLblGroupID" runat="server" Text='<%# Bind("GroupID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<div id="div<%# Eval("GroupID") %>" style="display:none">
<asp:UpdatePanel ID="updatePnlNestedGrid" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView ID="GroupMemberGridView" runat="server" AutoGenerateColumns="false" OnRowDeleting="GroupMemberGridView_RowDeleting"
OnRowCommand="GroupMemberGridView_RowCommand" CssClass="grid" ShowFooter="true" AllowPaging="true" PageSize="5" onpageindexchanging="GroupMemberGridView_PageIndexChanging" onpageindexchanged="GroupMemberGridView_PageIndexChanged">
<Columns>
<asp:TemplateField HeaderText="MemberID">
<ItemTemplate>
<asp:Label ID="mggvLblMemberID" runat="server" Text='<%# Bind("MemberID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Member Name" ItemStyle-Wrap="false">
<ItemTemplate>
<asp:Label ID="mggvLblMemberName" runat="server" Text='<%# Bind("MemberName") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="mggvDDLMemberName" runat="server"
class="chosen-single" data-placeholder="Choose member…">
</asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</Columns>
</asp:GridView>
这是我的 javascript,位于页面顶部:
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
function ExpandGrid(groupID) {
var div = document.getElementById(groupID);
var img = document.getElementById('img' + groupID);
div.style.display = "inline";
img.src = "Images/minus.png";
$(div + ".chosen-single").chosen("destroy");
$(div + ".chosen-single").chosen({
search_contains: true,
width: "100%",
no_results_text: "Sorry, no match!"
});
});
}
</script>
这是调用 javascript:
的 PageIndexChanged 方法
protected void GroupMemberGridView_PageIndexChanged(object sender, EventArgs e)
{
GridView tgvGroupMember = (GridView)sender;
int tiGroupID = Convert.ToInt32((tgvGroupMember.Parent.FindControl("uggvLblGroupID") as Label).Text);
UpdatePanel updatePnl = (UpdatePanel)tgvGroupMember.Parent.FindControl("updatePnlNestedGrid");
string strJavascriptFnCall = "ExpandGrid(" + tiGroupID.ToString() + ")";
ScriptManager.RegisterStartupScript(updatePnl, updatePnl.GetType(), "ExpandGrid", strJavascriptFnCall, true);
}
在调试中,当调用 ExpandGrid() javascript 函数时,出现错误:未定义 ExpandGrid()。
功能在标签之间,页面顶部。
为什么没有定义?
谢谢。
我让我的嵌套网格在分页后保持展开状态。
这就是我修复它的方式......
首先,我从 javascript 中删除了 Sys.WebForms.PageRequestManager.getInstance().add_endRequest
,这样函数看起来像这样:
function ExpandGrid(groupID) {
var div = document.getElementById(groupID);
alert("groupID: " + groupID + " div: " + div);
var img = document.getElementById('img' + groupID);
div.style.display = "inline";
img.src = "Images/minus.png";
$(div + ".chosen-single").chosen("destroy");
$(div + ".chosen-single").chosen({
search_contains: true,
width: "100%",
no_results_text: "Sorry, no match!"
});
然后在 PageIndexChanged 中我正确命名了参数并将其用单引号引起来:
string strJavascriptFnCall = "ExpandGrid('div" + tiGroupID.ToString() + "')";
最后,我将 UpdatePanel 放在 外面 div,而不是上面所示的里面。
成功了。
我希望这可以帮助某人。
我想弄清楚如何在移动到下一页后保持嵌套网格展开。 这是我的标记:
<asp:ScriptManager ID="scriptMger" runat="server"></asp:ScriptManager>
<asp:GridView ID="UserGroupGridView" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<a href="javascript:DivExpandCollapse('div<%# Eval("GroupID")%>');">
<img id="imgdiv<%# Eval("GroupID")%>" alt="" width="25px" border="0" src="Images/plus.png" /> </a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="GroupID">
<ItemTemplate>
<asp:Label ID="uggvLblGroupID" runat="server" Text='<%# Bind("GroupID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<div id="div<%# Eval("GroupID") %>" style="display:none">
<asp:UpdatePanel ID="updatePnlNestedGrid" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView ID="GroupMemberGridView" runat="server" AutoGenerateColumns="false" OnRowDeleting="GroupMemberGridView_RowDeleting"
OnRowCommand="GroupMemberGridView_RowCommand" CssClass="grid" ShowFooter="true" AllowPaging="true" PageSize="5" onpageindexchanging="GroupMemberGridView_PageIndexChanging" onpageindexchanged="GroupMemberGridView_PageIndexChanged">
<Columns>
<asp:TemplateField HeaderText="MemberID">
<ItemTemplate>
<asp:Label ID="mggvLblMemberID" runat="server" Text='<%# Bind("MemberID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Member Name" ItemStyle-Wrap="false">
<ItemTemplate>
<asp:Label ID="mggvLblMemberName" runat="server" Text='<%# Bind("MemberName") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="mggvDDLMemberName" runat="server"
class="chosen-single" data-placeholder="Choose member…">
</asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</Columns>
</asp:GridView>
这是我的 javascript,位于页面顶部:
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
function ExpandGrid(groupID) {
var div = document.getElementById(groupID);
var img = document.getElementById('img' + groupID);
div.style.display = "inline";
img.src = "Images/minus.png";
$(div + ".chosen-single").chosen("destroy");
$(div + ".chosen-single").chosen({
search_contains: true,
width: "100%",
no_results_text: "Sorry, no match!"
});
});
}
</script>
这是调用 javascript:
的 PageIndexChanged 方法protected void GroupMemberGridView_PageIndexChanged(object sender, EventArgs e)
{
GridView tgvGroupMember = (GridView)sender;
int tiGroupID = Convert.ToInt32((tgvGroupMember.Parent.FindControl("uggvLblGroupID") as Label).Text);
UpdatePanel updatePnl = (UpdatePanel)tgvGroupMember.Parent.FindControl("updatePnlNestedGrid");
string strJavascriptFnCall = "ExpandGrid(" + tiGroupID.ToString() + ")";
ScriptManager.RegisterStartupScript(updatePnl, updatePnl.GetType(), "ExpandGrid", strJavascriptFnCall, true);
}
在调试中,当调用 ExpandGrid() javascript 函数时,出现错误:未定义 ExpandGrid()。
功能在标签之间,页面顶部。 为什么没有定义?
谢谢。
我让我的嵌套网格在分页后保持展开状态。
这就是我修复它的方式......
首先,我从 javascript 中删除了 Sys.WebForms.PageRequestManager.getInstance().add_endRequest
,这样函数看起来像这样:
function ExpandGrid(groupID) {
var div = document.getElementById(groupID);
alert("groupID: " + groupID + " div: " + div);
var img = document.getElementById('img' + groupID);
div.style.display = "inline";
img.src = "Images/minus.png";
$(div + ".chosen-single").chosen("destroy");
$(div + ".chosen-single").chosen({
search_contains: true,
width: "100%",
no_results_text: "Sorry, no match!"
});
然后在 PageIndexChanged 中我正确命名了参数并将其用单引号引起来:
string strJavascriptFnCall = "ExpandGrid('div" + tiGroupID.ToString() + "')";
最后,我将 UpdatePanel 放在 外面 div,而不是上面所示的里面。
成功了。 我希望这可以帮助某人。