【发布时间】:2017-08-23 21:11:15
【问题描述】:
我需要您的帮助,我有一个嵌套中继器父级 (Repeater1) 和子 gridview (gvNewChild)。父中继器正在从父表调用记录 ID (FId),子网格视图正在从子表中获取父中继器 OnItemDataBound 上的记录 ID (FId),因此父表和子表都不同但与FId 是两个表中相同的记录 ID 号。
现在我可以分别使用它们的FId 从两个表中检索外部中继器和子网格视图中的数据。但我想知道是否有可能在子网格视图中提供导航而不是一次显示所有记录,所以实际上我希望我的子转发器只显示一条记录并访问我想使用的其他记录下一个和上一个导航。请指导我,下面是代码:
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="OnItemDataBound">
<ItemTemplate>
<u><b>
<asp:Label ID="Label7" class="HeadMasterTextBox" Width="" runat="server" Text='<%# Eval("NTitle") %>'></asp:Label>
</b></u>
<asp:Label ID="lblDetails" class="HeadMasterTextBox" Width="" runat="server" Text='<%# Eval("NDetails") %>'></asp:Label>
<asp:Panel ID="pnlOrders" runat="server" Style="display: block;">
GridView ID="gvNewChild" runat="server" DataKeyNames="FId" AutoGenerateColumns="false"
CssClass="tableWall" HeaderStyle-BorderColor="#ffffff" GridLines="None" Visible="true"
AllowPaging="true" PageSize="1" OnPageIndexChanging="gvNewChild_PageIndexChanging" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<table border="0" width="100%" align="center" class="">
<tr>
<td align="center" colspan="2">
<!-- <asp:ImageButton runat="server" ID="imgData" class="imgwall" ImageUrl='<%# Eval("ImageName") %>'
CommandName='<%# Eval("FId") %>' CommandArgument='<%# Eval("ImageName") %>' />
-->
<asp:Image ID="Image1" runat="server" ImageUrl='<%# "data:image/jpg;base64," + Convert.ToBase64String((byte[])Eval("BData")) %>'
Height="180px" Width="200px" />
<br />
<asp:Label ID="Label1" runat="server" Visible="true" Text='<%# Eval("ImageName") %>'></asp:Label>
</td>
</tr>
<tr>
<td style="vertical-align: top;" align="center">
<asp:Label ID="lblFId" runat="server" Visible="false" Text='<%# Eval("FId") %>'></asp:Label>
<asp:TextBox ID="txt_GFId" AutoPostBack="true" runat="server" Visible="true" Text='<%# Eval("FId") %>'></asp:TextBox>
<br />
<asp:LinkButton Text="" ID="lnkFIdCount" class="tableAdminTextBox" CommandArgument='<%# Eval("FId") %>'
runat="server" CommandName="Select" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<RowStyle BackColor="#ffffff" ForeColor="#333333" />
</asp:GridView>
<asp:HiddenField ID="hfFId" runat="server" Value='<%# Eval("FId") %>' />
</asp:Panel>
</ItemTemplate>
</asp:Repeater>
以下是出处:
if (!IsPostBack)
{
Repeater1.DataSource = GetData("select *from News order by (Id) desc");
Repeater1.DataBind();
}
private static DataTable GetData(string query)
{
string strConnString = ConfigurationManager.ConnectionStrings["BHCONNECTION"].ConnectionString;
using (SqlConnection con = new SqlConnection(strConnString))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = query;
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataSet ds = new DataSet())
{
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}
}
}
}
}
protected void OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string FId = (e.Item.FindControl("hfFId") as HiddenField).Value;
Repeater rptOrders = e.Item.FindControl("rptOrders") as Repeater;
rptOrders.DataSource = GetData(string.Format("select * from NewsPic where FId='{0}'", FId));
rptOrders.DataBind();
}
}
protected void gvNewChild_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView gvNewChild = (sender as GridView);
gvNewChild.PageIndex = e.NewPageIndex;
gvNewChild.DataBind();
}
【问题讨论】:
标签: c# asp.net gridview nested repeater