betterwy (阿拉真主,我赞美你)
找了半天也没有,如果您手边有这方面的代码,请贴一个,或者给个地址,我会好好研究学习的,谢谢!
Nobody helps me,then I have to ref this:
http://www.denisbauer.com/ASPNETControls/NestedHierarGridDemo.aspx
// the main javascript code
function HierarGrid_toggleRow(sender)
{
if (sender == null)
return;
var state = 1;
// if the hidden row has not already been generated,clone the panel into a new row
var existingRow = window.document.getElementById(sender.id + "showRow");
if (existingRow == null)
{
// getting a reference to the table
var table = GetParentElementByTagName(sender,"TABLE");
var index = GetParentElementByTagName(sender,"TR").sectionRowIndex + 1;
//concatenate name of hidden panel => replace "Icon" from sender.id with "Panel"/n
rowDivName = HierarGrid_ReplaceStr(sender.id,"Icon","Panel");
var rowDiv = window.document.getElementById(rowDivName);
// adding new row to table
var newRow = table.insertRow(index);
newRow.id = sender.id + "showRow";
// adding new cell to row
var newTD = document.createElement("TD");
if (table.rows[0].cells[0].colSpan > 1)
newTD.colSpan = table.rows[0].cells[0].colSpan;
else
newTD.colSpan = table.rows[0].cells.length;
var myTD = newRow.appendChild(newTD);
//clone Panel into new cell
var copy = rowDiv.cloneNode(false);
copy.innerHTML = rowDiv.innerHTML;
copy.style.display = "";
myTD.innerHTML = copy.innerHTML;
rowDiv.parentNode.removeChild(rowDiv);
sender.src = HierarGrid_ReplaceStr(sender.src,"plus","minus");
state = 1;
}
else
{
if (existingRow.style.display == "none")
{
existingRow.style.display = "";
sender.src = HierarGrid_ReplaceStr(sender.src,"plus","minus");
state = 1;
}
else
{
existingRow.style.display = "none";
sender.src = HierarGrid_ReplaceStr(sender.src,"minus","plus");
state = 0;
}
}
// ChangeRowState(sender,state);
}
function HierarGrid_ReplaceStr(orgString,findString,replString)
{
pos = orgString.lastIndexOf(findString);
return orgString.substr(0,pos) + replString + orgString.substr(pos + findString.length);
}
function GetParentElementByTagName(element,tagName)
{
var element = element;
while(element.tagName != tagName)
element = element.parentNode;
return element;
}
function ChangeRowState(sender,state)
{
var table = GetParentElementByTagName(sender,"TABLE");
var hiddenfield = table.getAttribute("ExpandedClientIDsName");
var rowStates = document.getElementByName(hiddenfield)[0].value;
if (state == 1)
{
if (rowStates.indexOf(sender.id) == -1)
rowStates += ", " + sender.id;
}
else if(state == 0)
rowState = rowStates.replace(sender.id,"");
document.getElementByName(hiddenfield)[0].value = rowStates;
}
// the main C# code,use page control
<asp:DataGrid ID="grdModel" OnItemDataBound="grdModel_ItemDataBound" DataKeyField="ProjectId"
BorderColor="#999999" BorderWidth=1 Width="100%" CellPadding=3 CellSpacing=0 AutoGenerateColumns=False Runat=server>
<HeaderStyle HorizontalAlign=Center CssClass="gridHeader"></HeaderStyle>
<Columns>
<asp:TemplateColumn>
<HeaderStyle HorizontalAlign=Left CssClass="gridHeader"></HeaderStyle>
<ItemTemplate>
<img id="ParentIcon_<%# DataBinder.Eval(Container.DataItem, "ProjectId") %>" src="<%=Page.ResolveUrl("~/Images/plus.gif")%>"
onClick="javascript:HierarGrid_toggleRow(this);">
<div id="ParentPanel_<%# DataBinder.Eval(Container.DataItem,"ProjectId") %>" style="display:none" width="90%">
<p><b></b><br/><br/>
<it:DisplayMechDetails ID="ctlDisplayMechDetails" OnRebindCommand="DetailRebind" Runat="Server" />
</p>
</div>
</ItemTemplate>
</asp:TemplateColumn>
<asp:HyperLinkColumn DataNavigateUrlField="ProjectId" DataNavigateUrlFormatString="~/Reports/MechDetail.aspx?pid={0}"
DataTextField="ModelName" HeaderText="Model">
<HeaderStyle HorizontalAlign=Left CssClass="gridHeader"></HeaderStyle>
</asp:HyperLinkColumn>
<asp:TemplateColumn HeaderText="Owner">
<HeaderStyle HorizontalAlign=Left CssClass="gridHeader"></HeaderStyle>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"Owner") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Other">
<HeaderStyle HorizontalAlign=Left CssClass="gridHeader"></HeaderStyle>
<ItemTemplate>
<asp:Label ID="lblOwnerId" Runat=server />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
void grdModel_ItemDataBound(Object s,DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Mech objmech = (Mech)e.Item.DataItem;
Control ctlDisplayMechDetails = (Control)e.Item.FindControl("ctlDisplayMechDetails");
DataGrid grdDetail = (DataGrid)ctlDisplayMechDetails.FindControl("grdDetail");
grdDetail.DataSource = MechDetail.GetDetailsById(objmech.ProjectId);
grdDetail.DataBind();
Label lblOwnerId = (Label)e.Item.FindControl("lblOwnerId");
ITUserCollection users = Mech.GetOwners(objmech.OwnerId);
foreach (ITUser u in users) lblOwnerId.Text += u.DisplayName + "<br/>";
}
}<%# DataBinder.Eval(Container.DataItem,"OwnerTW") %>
// user control code
<%@ Control Language="c#" %>
<%@ Import Namespace="ASPNET.MVT.BusinessLogicLayer" %>
<%@ Register TagPrefix="it" TagName="ListFiles" Src="~/UserControls/ListFiles.ascx" %>
<script runat="server">
//*********************************************************************
//
// DisplayMechDetails.ascx
//
// This user control displays a list of mechdetails.
//
//*********************************************************************
private MechDetailCollection _DataSource;
public event EventHandler RebindCommand;
void OnRebindCommand(EventArgs e) {
if (RebindCommand != null)
RebindCommand(this,e);
}
public MechDetailCollection DataSource {
get { return _DataSource; }
set { _DataSource = value; }
}
public void DataBind() {
grdDetail.DataSource = _DataSource;
grdDetail.DataBind();
if (grdDetail.Items.Count > 0) {
grdDetail.Visible = true;
} else {
grdDetail.Visible = false;
}
}
void grdDetail_ItemDataBound(Object s,DataGridItemEventArgs e) {
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
int detailId = Convert.ToInt32(grdDetail.DataKeys[(int)e.Item.ItemIndex]);
DataGrid grdQuestion = (DataGrid)e.Item.FindControl("grdQuestion");
grdQuestion.DataSource = MechQuestion.GetQuestionsById(detailId);
grdQuestion.DataBind();
if (grdQuestion.Items.Count > 0) grdQuestion.Visible = true;
else grdQuestion.Visible = false;
DataList lstFiles = (DataList)e.Item.FindControl("lstFiles");
lstFiles.DataSource = MechAttach.GetFilesById(detailId);
lstFiles.DataBind();
}
}
</script>
<asp:DataGrid ID="grdDetail" OnItemDataBound="grdDetail_ItemDataBound"
BorderColor="#999999" BorderWidth="1" Width="100%" CellPadding="3" CellSpacing="0" AutoGenerateColumns="False"
DataKeyField="DetailId" Runat="server">
<HeaderStyle CssClass="gridHeader"></HeaderStyle>
<Columns>
<asp:TemplateColumn>
<HeaderStyle HorizontalAlign="Left" CssClass="gridHeader"></HeaderStyle>
<ItemTemplate>
<img id="Icon_<%# DataBinder.Eval(Container.DataItem, "DetailId") %>" src="<%=Page.ResolveUrl("~/Images/plus.gif")%>" onClick="javascript:HierarGrid_toggleRow(this);">
<div id="Panel_<%# DataBinder.Eval(Container.DataItem, "DetailId") %>" style="display:none">
<p><b>分析</b><br/><br/>
<asp:DataGrid ID="grdQuestion" Width="98%" AutoGenerateColumns="False" AlternatingItemStyle-BackColor="white"
Cellspacing="0" CellPadding="3" BorderColor="#999999" BorderWidth="1" BackColor="#eeeeee"
Runat="server">
<HeaderStyle CssClass="Content" />
<Columns>
<asp:TemplateColumn HeaderText="Description">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"Content") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="SolutionShort">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"SolutionShort") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="SolutionLong">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"SolutionLong") %>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<br/>
</p>
</div>
</ItemTemplate>
</asp:TemplateColumn>
<asp:HyperLinkColumn DataNavigateUrlField="DetailId" DataNavigateUrlFormatString="~/Reports/MechDetailNew.aspx?did={0}"
DataTextField="PartNumber" SortExpression="PartNumber" HeaderText="Number">
<HeaderStyle HorizontalAlign="Left" CssClass="gridHeader"></HeaderStyle>
</asp:HyperLinkColumn>
<asp:TemplateColumn SortExpression="PartName" HeaderText="Name">
<HeaderStyle HorizontalAlign="Left" CssClass="gridHeader"></HeaderStyle>
<ItemTemplate>
<%# DataBinder.Eval(Container,"DataItem.PartName") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn SortExpression="Stage" HeaderText="Stage">
<HeaderStyle HorizontalAlign="Left" CssClass="gridHeader"></HeaderStyle>
<ItemTemplate>
<%# DataBinder.Eval(Container,"DataItem.StageSelect") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn SortExpression="BuidOn" HeaderText="日期">
<HeaderStyle HorizontalAlign="Left" CssClass="gridHeader"></HeaderStyle>
<ItemTemplate>
<%# DataBinder.Eval(Container,"DataItem.BuildOn") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn SortExpression="Status" HeaderText="Status">
<HeaderStyle HorizontalAlign="Left" CssClass="gridHeader"></HeaderStyle>
<ItemTemplate>
<%# DataBinder.Eval(Container,"DataItem.StatusClose") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn SortExpression="ExpectOn" HeaderText="完成日期">
<HeaderStyle HorizontalAlign="Left" CssClass="gridHeader"></HeaderStyle>
<ItemTemplate>
<%# DataBinder.Eval(Container,"DataItem.ExpectOn") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="附件">
<HeaderStyle HorizontalAlign="Left" CssClass="gridHeader"></HeaderStyle>
<ItemTemplate>
<asp:DataList ID="lstFiles" Runat="server" RepeatDirection="Vertical" Width="100%" CellPadding="0"
DataKeyField="AttId" CellSpacing="0">
<ItemTemplate>
<a href="/mvt/Doc/<%# DataBinder.Eval(Container,"DataItem.Mid")%>/<%# DataBinder.Eval(Container,"DataItem.Smid")%>/<%# DataBinder.Eval(Container,"DataItem.FrealFile") %>" target=_blank>
<%# DataBinder.Eval(Container,"DataItem.Fdesc") %>
.<%# DataBinder.Eval(Container,"DataItem.Fexts") %></a>
</ItemTemplate>
</asp:DataList>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>