日期:2014-05-18  浏览次数:20428 次

怎么用repeater控件来获取绑定列的id
我用repeater控件来显示新闻表的标题,但是当我要点中某新闻标题时,我想获取对应新闻的id号,我用repeater的要怎么来获取主键呢?

------解决方案--------------------
<asp:Repeater ID= "Repeater1 " runat= "server ">
<ItemTemplate>
<tr>
<td align= "center ">
<asp:Label ID= "ID " runat= "server " Visible= "false " Text= ' <%#Eval( "ID ")%> '>
</asp:Label> <asp:CheckBox ID= "CHK " runat= "server "> </asp:CheckBox>
</td>
------解决方案--------------------
前台页面部分:
<asp:Repeater id= "rptCategories " runat= "server " OnItemDataBound= "rptCategories_ItemDataBound ">
<HeaderTemplate>
<table width= "100% " border= "0 " cellspacing= "0 " cellpadding= "0 ">
</HeaderTemplate>
<ItemTemplate>
<!--分类名称-->
<tr> <th> <%# DataBinder.Eval(Container.DataItem, "TypeName ") %> </th> </tr>
<!--分类下的产品-->
<asp:Repeater id= "rptProduct " runat= "server ">
<ItemTemplate>
<tr> <td> <a href=ProductInfo.aspx?Id= <%# DataBinder.Eval(Container.DataItem, "ID ") %> > <%# DataBinder.Eval(Container.DataItem, "ProductName ") %> </a> </td> </tr>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>

后台代码部分(部分代码):
//在绑定分类品名时,绑定分类下的产品
private void rptCategories_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
BLL.Products products =new BLL.Products();
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rptProduct = (Repeater) e.Item.FindControl( "rptProduct ");
//找到分类Repeater关联的数据项
DataRowView rowv = (DataRowView)e.Item.DataItem;
//提取分类ID
int CategorieId = Convert.ToInt32(rowv[ "ID "]);
//根据分类ID查询该分类下的产品,并绑定产品Repeater
rptProduct.DataSource = products.GetProductsByCategorieId(CategorieId);
rptProduct.DataBind();
}
}
注意:其中 第2层的 OnItemDataBound= "rptCategories_ItemDataBound " 是重要部分,因为里层的repeater web里是认识不到的,只有在这指明了事件处理方法,才能触发后台程序里的方法。类似的也可以用这种方法多层嵌套,并能处理里面的事件。第二点在 aspx 指明事件的在后台程序,需要protected 来限定访问限制,如用private 就会出现限制访问的错误提示。

前几天我在外面一个业务里曾经遇到这个问题,并且吃了很大的亏,这方面的资料其实在网上是很多的,随便上baidu都可以找到,关键是理解它的思路就行了,这其实也不难。但在处理这个问题时,我的Repeater控件在别的地方出问题了,怎么调试,结果也不对,后来仔细一看 ,原来我的Repeater控件的首尾连在一起了,即变成:
<asp:Repeater id= "rptCategories " runat= "server " OnItemDataBound= "rptCategories_ItemDataBound ">
</asp:Repeater>
像这种情况,在调试时浏览器是不报错的,但嵌套的结果就不出来,在代码上千行的HTML源程序中,查起来还是很头疼呀。所以我希望大家以后在处理问题时,最好从多个角度入手,全盘考虑,有时问题往往就出在你最熟悉的内容上。
------解决方案--------------------
<script>
function showid(id)
{
alert(id);
}
</script>
<asp:Repeater ID= "Repeater1 " runat= "server ">
<ItemTemplate>
<tr>
<td align= "center &q