怎样取得Repeater控件主键,Repeater控件没有如Gridview的DataKeyNames属性。想获取Repeater记录的主键只有另想办法了。

下面这个例子,是在每笔记录行放一个Button(当然用LinkButton也可),用户点一点这个铵钮,即可获取这个记录。

.aspx(重点部分已经有注释):


取得Repeater控件主键_DataKeyNames取得Repeater控件主键_HiddenField_02View 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:


取得Repeater控件主键_DataKeyNames取得Repeater控件主键_HiddenField_02View 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);

        }

    }


}


 

选择结果:

取得Repeater控件主键_Button_05