取得Repeater控件主键

怎样取得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>
                                    Email
                                
</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);
        }
    }

}

选择结果:

原文地址:https://www.cnblogs.com/insus/p/2036884.html