嵌套网格视图显示加号/减号,仅当子网格有数据时才展开
本文关键字:网格 数据 显示 视图 嵌套 减号 | 更新日期: 2023-09-27 18:25:35
我使用这个经典脚本来显示加号/减号图标以展开子网格。因为上下文中并不是所有的行都有数据,所以我只想显示子网格中有数据的行的加号/减号。
这是我的脚本:
<script type="text/javascript">
$("[src*=plus]").live("click", function () {
$(this).closest("tr").after("<tr><td></td><td colspan = '999'>" + $(this).next().html() + "</td></tr>")
$(this).attr("src", "images/minus.png");
});
$("[src*=minus]").live("click", function () {
$(this).attr("src", "images/plus.png");
$(this).closest("tr").next().remove();
});
</script>
我用来加载数据的方法是启动数据集"GetData()"的OnRowDataBound。
if (e.Row.RowType == DataControlRowType.DataRow)
{
string code = zeroLevelGrid.DataKeys[e.Row.RowIndex].Value.ToString();
GridView firstLevelGrid = e.Row.FindControl("firstLevelGrid") as GridView;
firstLevelGrid.DataSource = GetData(string.Format("thestring...", code));
firstLevelGrid.DataBind();
}
更新这是它的html面:
<asp:GridView ID="zeroLevelGrid" runat="server" AutoGenerateColumns="false" CssClass="Grid"
DataKeyNames="Code" OnRowDataBound="OnRowDataBoundZeroLevel">
<Columns>
<asp:BoundField ItemStyle-Width="35px" DataField="Id" HeaderText="Id" />
<asp:BoundField ItemStyle-Width="50px" DataField="Code" HeaderText="Code" />
<asp:BoundField ItemStyle-Width="150px" DataField="Description" HeaderText="Description" />
<asp:BoundField ItemStyle-Width="50px" DataField="Quantity" HeaderText="Quantity" />
<asp:TemplateField>
<ItemTemplate>
<img alt="" style="cursor: pointer" src="images/plus.png" />
<asp:Panel ID="firstLevelPanel" runat="server" Style="display: none">
<asp:GridView ID="firstLevelGrid" runat="server" AutoGenerateColumns="false" CssClass="ChildGrid" DataKeyNames="Code" OnRowDataBound="firstLevelGrid_OnRowDataBound">
<Columns>
<asp:BoundField ItemStyle-Width="35px" DataField="Id" HeaderText="Id" />
<asp:BoundField ItemStyle-Width="50px" DataField="Code" HeaderText="Code" />
<asp:BoundField ItemStyle-Width="150px" DataField="Description" HeaderText="Description" />
<asp:BoundField ItemStyle-Width="50px" DataField="Quantity" HeaderText="Quantity" />
<asp:TemplateField>
<ItemTemplate>
...................
如何实现只显示具有子网格的行的pus/minus?
您可以将其隐藏在绑定内部网格的位置
将网格图像设为runat=server
,并在绑定内部网格视图的位置检查查询中的行数(如果为零)。
var dataSource=GetData(string.Format("thestring...", code));
//check number of rows here using count
var count=dataSource.Count();
if(count>0)
{
firstLevelGrid.DataSource = GetData(string.Format("thestring...", code));
firstLevelGrid.DataBind();
}
else
{
//find you image and hide it
var element = e.Row.FindControl("imageid");
//hide it
}
编辑1
使图像runat='server'
<img alt="" style="cursor: pointer" src="images/plus.png" runat="server" id="img_expand" />
在后面的代码中
Image img=(Image)e.Row.FindControl("img_expand");
img.visisbility=fasle;