我有一箇中繼器綁定來自數據庫的數據。現在點擊它的行,我想綁定另一箇中繼器的詳細信息。 一件事更多兩個不嵌套。 OK讓我用一個例子來解釋一下,我有一個類的中繼器。這個轉發器具有有關學校中所有班級的綁定信息。現在,我有另一個轉發器來獲取特定班級的詳細信息。現在當我點擊班級列表中的某個班級時,我將獲得詳細信息,即綁定第二個轉發器班級ID。如何綁定中繼器點擊另一箇中繼器的一行?
1
A
回答
1
好的。那麼你知道用戶點擊的行的特定id。在點擊事件中獲取id並將它傳遞給你的存儲過程,或者你以什麼方式綁定到repeater.check下面..
<asp:Repeater ID="repGrd" runat="server">
<ItemTemplate>
<asp:LinkButton ID="lnkbtn" Runat="server" RowID='<%#DataBinder.Eval(Container.DataItem,"ID")%>' OnCommand="clickbutton">Click Here</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
和後面的代碼是這樣的..
#region On click of row binding repeater
public void clickbutton(Object sender,CommandEventArgs e)
{
try
{
//Getting the ID of clicked row
string RowIDval=((LinkButton)sender).Attributes["RowID"].ToString().Trim();
// Write your code here to bind the repeater as you got the ID
}
catch(Exception ex)
{
}
}
#endregion
嘗試了這一點。
0
我認爲這是你在找什麼:
一個用戶控件顯示有關類的擴展信息。帶有一個綁定在Class實體集合上的中繼器的Web表單。轉發器的ItemTemplate包含一個用於常規類信息的標題和一個用Visibility
設置爲false的UserControl實例。然後,我們根據用戶是否想要查看詳細信息來打開/關閉此UC。
某些代碼:
實體
public class Class
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ClassDetails : Class
{
public int NumberOfWeeks
{
get
{
return this.Id;
}
}
}
的ClassDetails
用戶控制
(CSS)
<hr />
Class Details:<br />
Number of Weeks: <asp:Label ID="lblNumWeeks" runat="server" />
<hr />
(代號BEH IND)
public void Populate(ClassDetails classDetails)
{
this.lblNumWeeks.Text = classDetails.NumberOfWeeks.ToString();
}
WebForm的
(CSS)
<%@ Register Src="~/ClassDetailsUC.ascx" TagPrefix="SO" TagName="ClassDetailsUC" %>
<asp:Repeater ID="rptClassList" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lblClassName" runat="server" />
<asp:Button ID="btnShow" runat="server" />
<asp:Panel ID="pnlDetails" Visible="false" runat="server">
<br />
<SO:ClassDetailsUC ID="ucClassDetails" runat="server" />
</asp:Panel>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
(cs文件)
/// <summary>
/// Page-level collection of Class instances
/// </summary>
List<ClassDetails> classes;
/// <summary>
/// The current class id we are displaying extended information for
/// </summary>
private int? ActiveId
{
get
{
if (this.ViewState["ClassIdDetails"] == null)
{
return null;
}
else
{
return (int?)this.ViewState["ClassIdDetails"];
}
}
set
{
this.ViewState["ClassIdDetails"] = value;
}
}
protected override void OnInit(EventArgs e)
{
this.rptClassList.ItemDataBound += new RepeaterItemEventHandler(rptClassList_ItemDataBound);
this.rptClassList.ItemCommand += new RepeaterCommandEventHandler(rptClassList_ItemCommand);
base.OnInit(e);
}
void rptClassList_ItemCommand(object source, RepeaterCommandEventArgs e)
{
//for now we know this is the only button on the repeater. so no need to check CommandType
//set new ActiveId
this.ActiveId = Convert.ToInt32(e.CommandArgument);
//re-bind repeater to refresh data
this.BindData();
}
/// <summary>
/// For each Class entity bound, we display some basic info.
/// <para>We also check to see if the current Class is the ActiveId. If it is, turn on the detail panel and populate the ClassDetailsUC</para>
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void rptClassList_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Class classItem = (Class)e.Item.DataItem;
((Label)e.Item.FindControl("lblClassName")).Text = classItem.Name;
((Button)e.Item.FindControl("btnShow")).CommandArgument = classItem.Id.ToString();
if (this.ActiveId.HasValue && this.ActiveId == classItem.Id)
{
//we want to display details for this class
((Panel)e.Item.FindControl("pnlDetails")).Visible = true;
//get ClassDetails instance
ClassDetails details = this.RetrieveDetails(classItem.Id);
//populate uc
((ClassDetailsUC)e.Item.FindControl("ucClassDetails")).Populate(details);
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
//quick data retrieval process :)
classes = new List<ClassDetails> {
new ClassDetails() { Id = 1, Name = "Class 1" },
new ClassDetails() { Id = 2, Name = "Class 2" },
new ClassDetails() { Id = 3, Name = "Class 3" }
};
if (!this.IsPostBack)
{
//only bind on initial load
this.BindData();
}
}
private void BindData()
{
this.rptClassList.DataSource = this.classes;
this.rptClassList.DataBind();
}
/// <summary>
/// Quick function to simulate retrieving a single ClassDetails instance
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private ClassDetails RetrieveDetails(int id)
{
return this.classes.Where(c => c.Id == id).Single();
}
相關問題
- 1. 在另一箇中繼器內動態綁定中繼器?
- 2. 綁定一箇中繼器
- 3. 如何找到另一箇中繼器內的中繼器
- 4. 二級中繼器w/ObjectDataSource數據綁定事件是否觸發另一箇中繼器的點擊事件?
- 5. 將數據綁定到中繼器,通過另一箇中繼器中的用戶控件單擊按鈕
- 6. 如何獲得empid,同時點擊中繼器的一行?
- 7. 中繼器中的綁定值,關於中繼器中第一列的選擇
- 8. 如何綁定中繼器內的gridview?
- 9. 中繼器按鈕點擊
- 10. 如何將一箇中繼器的控件訪問到另一箇中繼器的OnItemCommand()方法中?
- 11. 中繼器綁定@ serverside
- 12. 如何綁定嵌套中繼器?
- 13. 如何綁定內部中繼器?
- 14. 量角器通過綁定點擊中繼器中的特定元素
- 15. 查找另一箇中繼器內的中繼器內的文本框
- 16. 如何在一箇中繼器中綁定兩個不同的查詢?
- 17. 將兩個sql表數據綁定到一箇中繼器
- 18. 綁定列表<CompositeControl的>到一箇中繼器
- 19. 一箇中繼器之外的控制綁定值
- 20. 將一個值綁定到一箇中繼器內的自定義控件
- 21. 進樣索引時綁定到一箇中繼器
- 22. asp.net + C# - 在一箇中繼器綁定格式數據
- 23. JavaScript的一箇中繼器中
- 24. RequiredFieldValidator的一箇中繼器中
- 25. 如何重定向到另一個頁面,同時點擊中繼器的項目?
- 26. 如何從另一個包含中繼器的控件公開中繼器的模板?
- 27. 綁定中繼器的數據源
- 28. 多種類型綁定的中繼器
- 29. 做一些按鈕點擊然後繼續到另一個視圖控制器
- 30. 如何通過單擊視圖繼續執行另一個視圖控制器?
如果您使用的LinkButton的CommandArgument屬性將是更容易檢索id –