GridView多层嵌套,但找不到第三层

hycheng163 2010-05-12 04:36:36
如下表,设备类型,品牌,型号,是三层关系,页面用GridView多层嵌套来表现这种关系
Create table Dictionary
(
DicID int identity(1,1),
ParentID int ,
DicName Varchar(100)
)

insert into Dictionary select 0,'设备类型'
--设备类型
insert into Dictionary select 1,'微机'
insert into Dictionary select 1,'服务器'
insert into Dictionary select 1,'笔记本'
insert into Dictionary select 1,'打印机'
insert into Dictionary select 1,'扫描仪'
insert into Dictionary select 1,'其他'
--品牌
insert into Dictionary select (select dicID from Dictionary where DicName='微机'),'长城'
insert into Dictionary select (select dicID from Dictionary where DicName='微机'),'联想'
insert into Dictionary select (select dicID from Dictionary where DicName='微机'),'IBM'
insert into Dictionary select (select dicID from Dictionary where DicName='微机'),'HP'
insert into Dictionary select (select dicID from Dictionary where DicName='微机'),'明基'
insert into Dictionary select (select dicID from Dictionary where DicName='服务器'),'IBM'
insert into Dictionary select (select dicID from Dictionary where DicName='服务器'),'HP'
insert into Dictionary select (select dicID from Dictionary where DicName='笔记本'),'长城'
insert into Dictionary select (select dicID from Dictionary where DicName='笔记本'),'联想'
insert into Dictionary select (select dicID from Dictionary where DicName='笔记本'),'IBM'
insert into Dictionary select (select dicID from Dictionary where DicName='笔记本'),'HP'
insert into Dictionary select (select dicID from Dictionary where DicName='笔记本'),'明基'
insert into Dictionary select (select dicID from Dictionary where DicName='打印机'),'打印机'
--型号
insert into Dictionary select (select dicID from Dictionary where DicName='长城' and ParentID =(select dicID from Dictionary where DicName='微机' )),'开天123'
insert into Dictionary select (select dicID from Dictionary where DicName='长城' and ParentID =(select dicID from Dictionary where DicName='微机' )),'开天456'
insert into Dictionary select (select dicID from Dictionary where DicName='长城' and ParentID =(select dicID from Dictionary where DicName='微机' )),'开天789'

前台:
<asp:GridView ID="ParentGridView" BorderColor="Black" OnRowDataBound="ParentGridView_RowDataBound" runat="server" AutoGenerateColumns="False" Font-Size="12px" Width="530px" AllowSorting="True" OnRowEditing="ParentGridView_RowEditing" OnRowCancelingEdit="ParentGridView_RowCancelingEdit">
<Columns>
<asp:BoundField DataField="DicID" HeaderText="编号" ReadOnly="True"/>
<asp:BoundField DataField="DicName" HeaderText="设备类型" ReadOnly="True" />
<asp:TemplateField HeaderText="查看详情">
<ItemTemplate>
<asp:Button ID="ViewChild_Button" runat="server" Text="Details" CommandName="Edit" />
</ItemTemplate>
<EditItemTemplate>
<asp:Button ID="CancelChild_Button" runat="server" Text="Cancel" CommandName="Cancel" />
<asp:GridView ID="ChildGridView" runat="server" AllowPaging="True" PageSize="3" AutoGenerateColumns="False" OnRowEditing= "ChildGridView_OnRowEditing" BorderColor="Black" OnRowDataBound="ChildGridView_RowDataBound" DataKeyNames="DicID" Width="241px" >
<Columns>
<asp:BoundField DataField="DicName" HeaderText="品牌" ReadOnly="True" SortExpression="DicName" />
<asp:TemplateField HeaderText="查看详情">
<ItemTemplate>
<asp:Button ID="ViewGrantChild_Button" runat="server" Text="Details" CommandName="Edit" />
</ItemTemplate>
<EditItemTemplate>
<asp:Button ID="CancelGrantChild_Button" runat="server" Text="Cancel" CommandName="Cancel" />
<asp:GridView ID="GrantChildGridView" runat="server" AllowPaging="True" PageSize="3" AutoGenerateColumns="False" BorderColor="Black" DataKeyNames="DicID" Width="331px" >
<Columns>
<asp:BoundField DataField="DicName" HeaderText="型号" ReadOnly="true" SortExpression="DicName" ItemStyle-Width="100px" />
</Columns>
<HeaderStyle BackColor="Azure" Font-Size="12px" HorizontalAlign="Center" />
<RowStyle HorizontalAlign="Center" />
<PagerStyle HorizontalAlign="Center" />
</asp:GridView>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle BackColor="Azure" Font-Size="12px" HorizontalAlign="Center" />
<RowStyle HorizontalAlign="Center" />
<PagerStyle HorizontalAlign="Center" />
</asp:GridView>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle BackColor="Azure" Font-Size="12px" HorizontalAlign="Center" />
<RowStyle HorizontalAlign="Center" />
<PagerStyle HorizontalAlign="Center" />
</asp:GridView>
...全文
217 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hycheng163 2010-05-13
  • 打赏
  • 举报
回复
不太清楚你的意思哦,我想在ChildGridView_OnRowEditing那里获取第三层(GrantChile)
[Quote=引用 3 楼 wuyq11 的回复:]
protected void gridMaster_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
GridView gridChild = (GridView)e.Row.Cells[1].Controls[1]……
[/Quote]
wuyq11 2010-05-12
  • 打赏
  • 举报
回复
protected void gridMaster_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
GridView gridChild = (GridView)e.Row.Cells[1].Controls[1];//或FindControl
}
}
hycheng163 2010-05-12
  • 打赏
  • 举报
回复
寻找第三层与寻找第二层的方法类似,但寻找第二层时不会报错,寻找第三层就报错了
hycheng163 2010-05-12
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bindParent();
}
}

public void bindParent()
{
string sqlStr = "select DicID ,DicName from dictionary where parentID=(select DicID from dictionary where DicName='设备类型')";
DataSet myds = new Class1().DataStr(sqlStr);
ParentGridView.DataSource = myds;
ParentGridView.DataKeyNames = new string[] { "DicID" };
ParentGridView.DataBind();
}

protected void ParentGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
foreach (TableCell tc in e.Row.Cells)
{
tc.Attributes["style"] = "border-color:Black";
}
if (e.Row.RowIndex != -1)
{
int id = ParentGridView.PageIndex * ParentGridView.PageSize + e.Row.RowIndex + 1;
e.Row.Cells[0].Text = id.ToString();
}
}
protected void ParentGridView_RowEditing(object sender, GridViewEditEventArgs e)
{
int parent_index = e.NewEditIndex;
ParentGridView.EditIndex = parent_index;
bindParent();
Session["sParentGridViewIndex"] = parent_index;
//寻找第二层
GridView gvChild = (GridView)(ParentGridView.Rows[parent_index].FindControl("ChildGridView"));
string sql = "select * from Dictionary where ParentID =" + ParentGridView.DataKeys[parent_index].Value;
DataSet ds = new Class1().DataStr(sql);
gvChild.DataSource = ds.Tables[0].DefaultView;
gvChild.DataBind();

}
protected void ChildGridView_OnRowEditing(object sender, GridViewEditEventArgs e)
{
int parent_index = (int)Session["sParentGridViewIndex"];
GridViewRow parent_row = ParentGridView.Rows[parent_index];
GridView ChildGridView = (GridView)parent_row.FindControl("ChildGridView");
int child_index = e.NewEditIndex;
ChildGridView.EditIndex = child_index;

//寻找第三层 这句出现了问题,提示找不到 GrantChildGridView
GridView gvGrantChild = (GridView)(ChildGridView.Rows[child_index].FindControl("GrantChildGridView"));
string sql = "select * from Dictionary where ParentID =" + ChildGridView.DataKeys[child_index].Value;
DataSet ds = new Class1().DataStr(sql);
gvGrantChild.DataSource = ds;
gvGrantChild.DataBind();
}
protected void ChildGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
foreach (TableCell tc in e.Row.Cells)
{
tc.Attributes["style"] = "border-color:Black";
}

}
protected void GrandChildGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
foreach (TableCell tc in e.Row.Cells)
{
tc.Attributes["style"] = "border-color:Black";
}
}
protected void ParentGridView_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
ParentGridView.EditIndex = -1;
bindParent();
}

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧