C# 如何在asp.net中填充和显示子gridview
我正在从事一个asp.NETC#项目。我已经创建了一个嵌套的gridview(gv)。子gv数据的主键是父gv的DatakeyNames值。DatakeyNames设置为SchemeId。我遇到的问题是,如果我使用DatakeyNames的SchemeId从代码隐藏中填充子gv,则不会显示子gv。我尝试使用带有ItemTemplate的hiddenfield获取值。问题是在栅格视图的末尾会显示一个空列。为了避免这种情况,我尝试将hiddenfield添加为另一个ItemTemplate的一部分,然后也不显示子gv。然后我在包含hiddenfield的ItemTemplate上尝试visible=False,但仍然显示一个空列。这很奇怪。非常感谢您的帮助C# 如何在asp.net中填充和显示子gridview,c#,asp.net,gridview,C#,Asp.net,Gridview,我正在从事一个asp.NETC#项目。我已经创建了一个嵌套的gridview(gv)。子gv数据的主键是父gv的DatakeyNames值。DatakeyNames设置为SchemeId。我遇到的问题是,如果我使用DatakeyNames的SchemeId从代码隐藏中填充子gv,则不会显示子gv。我尝试使用带有ItemTemplate的hiddenfield获取值。问题是在栅格视图的末尾会显示一个空列。为了避免这种情况,我尝试将hiddenfield添加为另一个ItemTemplate的一部分,
<asp:GridView ID="grdParent" BackColor="#f1f1f1" CellPadding="0" CellSpacing="0"
AutoGenerateColumns=false DataKeyNames="SchemeId"
runat="server" OnRowDataBound="grdParent_RowDataBound" Width="80%" OnRowCreated="grdParent_OnRowCreated" >
<AlternatingRowStyle BackColor="White" />
<RowStyle Font-Size="12px" VerticalAlign="Top" Height="30px" />
<HeaderStyle BackColor="#57668A" ForeColor="#d6d6d6" Font-Bold="True" Font-Size="14px" Height="35px"/>
<Columns>
<asp:TemplateField>
<ItemTemplate>
<a href="javascript:expandcollapse('div<%# Eval("PlanedScheduleId") %>', 'one');">
<img id="imgdiv<%# Eval("PlanedScheduleId") %>" alt="Click to show/hide Orders for Customer <%# Eval("PlanedScheduleId") %>" width="10px" height="10px" src="images/Minus-26.png"/>
</a>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Date" SortExpression="Date">
<ItemTemplate>
<asp:Label ID="lblDate" Text='<%# Eval("Date") %>' runat="server"></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:TemplateField>
<asp:TemplateField >
<ItemTemplate >
<asp:HiddenField ID="hfSchemeId" runat="server" Value='<%# Eval("SchemeId") %>' />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<tr>
<td colspan="100%">
<div class="divBackground" id="div<%# Eval("PlanedScheduleId") %>" style="position:relative;OVERFLOW: auto; WIDTH: 97%;padding:0px 20px 20px 31px" >
<asp:GridView ID="grdChild" BackColor="White" Width=100% Font-Size=X-Small
AutoGenerateColumns=false Font-Names="Verdana" runat="server" DataKeyNames="SchemeId"
BorderStyle=Double BorderColor="#57668A">
<RowStyle Font-Size="12px" VerticalAlign="Top" height="25px" />
<HeaderStyle BackColor="#B0C4DE" ForeColor="Black" Font-Bold="True" Font-Size="12px" Height="30px"/>
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField HeaderText="Start Date" >
<ItemTemplate>
<asp:Label ID="lblOrderID" Text='<%# Eval("StartDate") %>' runat="server"></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Start Time">
<ItemTemplate><%# Eval("StartTime")%></ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:TemplateField>
<asp:TemplateField HeaderText="End Date" >
<ItemTemplate>
<asp:Label ID="Label2" Text='<%# Eval("EndDate") %>' runat="server"></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:TemplateField>
<asp:TemplateField HeaderText="End Time">
<ItemTemplate><%# Eval("EndTime")%></ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</td>
</tr>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void grdParent_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow row = e.Row;
if (e.Row.RowType == DataControlRowType.DataRow)
{
int SchemeId = Convert.ToInt32(grdParent.DataKeys[e.Row.RowIndex].Values[0]);
GridView gv = new GridView();
gv = (GridView)row.FindControl("grdChild");
gv.DataSource = ChildDataSource(SchemeId.ToString());
gv.DataBind();
}
}
受保护的void grdParent_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
GridViewRow行=e.行;
如果(e.Row.RowType==DataControlRowType.DataRow)
{
int SchemeId=Convert.ToInt32(grdParent.DataKeys[e.Row.RowIndex].Values[0]);
GridView gv=新的GridView();
gv=(GridView)row.FindControl(“grdChild”);
gv.DataSource=ChildDataSource(SchemeId.ToString());
gv.DataBind();
}
}
您的代码是正确的,只是它应该是e.Row.FindControl(“grdChild”)
。调试SchemeId
的值以及ChildDataSource
中发生的事情,看看它是否真的返回了任何数据;我错漏了。有趣的是,ChildDataSource有数据,但不知何故没有显示。谢谢