怎样取得Repeater控件主键,Repeater控件没有如Gridview的DataKeyNames属性。想获取Repeater记录的主键只有另想办法了。
下面这个例子,是在每笔记录行放一个Button(当然用LinkButton也可),用户点一点这个铵钮,即可获取这个记录。
.aspx(重点部分已经有注释):
View Code
<!--技术重点是使用OnItemCreated,而不是使用OnItemDataBound-->
<asp:Repeater ID="Repeater1" runat="server" OnItemCreated="Repeater1_ItemCreated">
<HeaderTemplate>
<table border="1" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td>
ID
</td>
<td>
Name
</td>
<td>
</td>
<td>
SELECT
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# Eval("MemberId") %>
<!--由于Repeater控件没有如GridView的DataKeyNames属性,因此放一个HiddenField控件-->
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("MemberId") %>' />
</td>
<td>
<%# Eval("Name") %>
</td>
<td>
<%# Eval("Email") %>
</td>
<td>
<!--只放一个Button,无需写什么,当然你拉一个LinkButton也可以-->
<asp:Button ID="Button1" runat="server" Text="Button" />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
.aspx.cs:
View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insus.NET;
public partial class Default2 : System.Web.UI.Page
{
Member objMember = new Member();
InsusJsUtility objJs = new InsusJsUtility();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Data_Binding();
}
}
private void Data_Binding()
{
this.Repeater1.DataSource = objMember.GetMember().Tables[0];
this.Repeater1.DataBind();
}
//ItemCreated事件
protected void Repeater1_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//判断Button是否存在
if (e.Item.FindControl("Button1") != null)
{
//如果存在,把对象转换为Button。
Button InsusButton = (Button)e.Item.FindControl("Button1");
//产生Click事件
InsusButton.Click += new EventHandler(InsusButton_Click);
}
}
}
//如何获取主键
private void InsusButton_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
//判断HiddenField是否存在
if (button.NamingContainer.FindControl("HiddenField1") != null)
{
//存在,把对象转换为HiddenField控件
HiddenField hf = (HiddenField)button.NamingContainer.FindControl("HiddenField1");
//取出HiddenField的Value值。
string id = hf.Value;
//取出之后,就可以在这里处理你的事情了,下面只是简单抛出而已。
objJs.JsAlert("你选择的记录主键ID是" + id);
}
}
}
选择结果: