binden von Daten an repeater innerhalb eines gridview
Hallo habe einen repeater, die innerhalb einer gridview. wenn ich bind die Daten in gridview-Daten die Bindung an den controles innerhalb des gridview-aber repeater ist nicht verbindlich.
<asp:GridView ID="gvMain" runat="server" AllowPaging="false" AutoGenerateColumns="false"
Width="200px" Height="200px"
onrowdatabound="gvMain_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lbtnDptName" runat="server" Text='<%# Eval("deptName")%>'></asp:LinkButton>
<asp:Label ID="lblDptDesc" runat="server" Text = "sdfsdfsdfdsf"></asp:Label>
<asp:Repeater ID="rtFunctions" runat="server" OnItemDataBound="rtFunctions_ItemDataBound" >
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:LinkButton ID="lbtnFunctions" runat="server" ></asp:LinkButton>
<asp:Label ID="lbltemp" Style="border:1px solid blue;width:20px;height:20px;background:green" runat="server" Text="TempLabel" ></asp:Label>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
in die Seite laden:
gvMain.DataSource = objDeptColl;
gvMain.DataBind();
Codebehind-repeater:
protected void gvMain_RowDataBound(object sender, GridViewRowEventArgs e)
{
FunctionCollection objTempFuncColl = new FunctionCollection();
objTempFuncColl = (FunctionCollection)Cache["objFuncColl"];
Repeater rt = (Repeater)e.Row.FindControl("rtFunctions");
if (e.Row.RowType == DataControlRowType.DataRow && objTempFuncColl.Count !=0 )
{
rt.DataSource = objTempFuncColl;
rt.DataBind();
}
}
protected void rtFunctions_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
FunctionCollection objTempFuncColl = new FunctionCollection();
objTempFuncColl = (FunctionCollection)Cache["objFuncColl"];
Repeater rt = (Repeater)e.Item.FindControl("rtFunctions");
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
foreach (Functions f in objTempFuncColl)
{
LinkButton lnk = (LinkButton)e.Item.FindControl("lbtnFunctions");
lnk.Text = f.funcName;
}
}
}
linkbutton in gridview ist verbindlich, aber der linkbutton im repeater ist nicht verbindlich.
- wo ist der code, der tatsächlich binden von Daten an den repeater?
- Ich habe den code Hinzugefügt ..finden Sie, dass in der Frage
- Wenn Sie einen Haltepunkt auf die DataBind() für den repeater, trifft es das?
- Ja.. die foreach-Schleife in das Itemdatabound-Ereignis wird Durchlaufen und der Funktionsname-Wert wird beim anfügen an die link-Taste, aber es ist nicht die Anzeige im repeater.
- wenn Sie fügen Sie einige Standard-text in den Linkbutton und kommentieren Sie den code, der versucht, es zu ändern, tut es das display dann? Um ehrlich zu sein, kommentieren Sie die ganze rtFunctions_ItemDataBound und sehen, was passiert.
- Ich dachte, wie die noch so verwendet das label nach den link-button . Text für die, die auch nicht anzeigen
- Funktioniert f.funcName einen Wert?
- Ja.. es ist verbindlich den linkbutton mit den Werten. problem ist linkbutton-Wert wird nicht angezeigt
- Sind Sie sicher? Wenn Sie die Einstellung lnk.Text in ""/Zeichenfolge.leer ist, werden Sie nicht sehen, das gleiche mit der label. Setzen Sie einen Haltepunkt auf f.Funktionsname und einfach nur bestätigen. Ich wurden erwischt, die von dumme Dinge wie diese vor
- ChrisBint: linkbutton ist die Zuweisung an den Wert richtig. finden Sie das Etikett in der aspx. Ich weiß nicht, warum die den label-text auch nicht angezeigt
- lassen Sie uns weiter, diese Diskussion im chat
- Haben Sie bestätigt, dass der Funktionsname hat eigentlich nur einen Wert anzeigen? Es kann sein, zuweisen, aber wenn es die Zuordnung zu einem leeren string, nichts angezeigt werden würde. Setzen Sie einen Haltepunkt in den code und bewegen Sie den Mauszeiger über f.Funktionsname und sicherzustellen, dass es wirklich einen Wert hat.
- Es ist mit den Werten.
- Siehst du Sie (Bezeichnung und link) in der HTML-Quelle?
- Nein.. dem Versuch, sich auf verschiedene Art und Weise
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint das problem zu sein mit dem repeater ondatabound Funktion.
Die erste Zeile ist nicht nötig, da Sie, dann ersetzen Sie es mit dem Inhalt der cache, die kann null sein, wenn es abgelaufen oder gelöscht werden, oder eine Instanz.
Für jede Zeile in der repeater, der link wird gesetzt, um den letzten Wert in der objtempfunccoll.
Sie brauchen nicht wirklich von der Funktion abgesehen von
lnk.Text = f.funcName;
(Sie müssen gegossen f von dataitem)Wenn Sie die databind-Methode auf das gridview, ondatabound heißt für jede Zeile. du hast das wired-up. Für jede Zeile, die Sie jetzt zu finden, repeater, legen Sie die datasource (wir nennen diese innere Sammlung) & Aufruf von databind auf den repeater. dadurch wird ondatabound auf den repeater genannt zu werden, aber der container.dataitem jetzt Punkte, um jedes Element in der inneren Sammlung. Wir können das direkt, Gießen container.dataitem, um unabhängig von der Art der inneren Sammlung ist eine Liste.
Simon
Sie nicht verbindlich zu sein scheinen die repeater innerhalb dieses Codes. Sie müssen möglicherweise einige code zum binden von Daten an das GridView-Steuerelement, das wird aber nicht automatisch binden alles, um den repeater in der ItemTemplate.
gvMain_RowDataBound
Methode gibt es eineDataBind
nennen.Warum nicht databind aspx, wobei leere der code hinter: