查找在GridView / Repeater中单击Button的行

时间:2011-10-20 09:19:49

标签: asp.net gridview repeater

我绑定了RepeaterRepeater中的每一行(是正确的单词?)都有ButtonHiddenField。如何根据点击的按钮确定HiddenField的值?

Button OnClick事件后面的代码:

protected void btnButton1_Click(object sender, EventArgs e)
{
    Button btnButton1 = (Button)sender;        
    // how do i get this row's HiddenField Value?
}

修改:来自Pleun的CommandArgument建议有效,但我仍然遇到问题。我需要在Repeater中找到Button所属的行(?),因为每行中还有一个TextBox,我需要它的值。所以理想情况下我想得到那一行并去FindControl(“TextBox1”)等等。抱歉,应该在我最初的问题中说明

4 个答案:

答案 0 :(得分:5)

我喜欢做的是向按钮添加一个CommandArgument。在这段代码中它的图像按钮但想法是一样的。所以也不需要额外的隐藏领域。

<asp:ImageButton ID="btnMail" ImageUrl="~/imgnew/prof/sendlink.png" 
CommandArgument='<%# Eval("id")%>'

在_Click事件中

 string id = ((ImageButton)sender).CommandArgument;

更新:

如果您需要所有数据,则需要一个不同的事件。转发器中的数据可在

中作为项目获得
RepeaterCommandEventArgs 

在Command事件中(RepeaterCommandEventArgs)

用于处理Command事件,请参阅此示例  http://www.asp.net/data-access/tutorials/custom-buttons-in-the-datalist-and-repeater-cs 要么 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeatercommandeventargs.aspx

答案 1 :(得分:0)

如果您使用Repeater,则可以在ItemDataBound中识别每行中的元素。

如果您使用gridview使用RowDataBound

希望这有帮助

答案 2 :(得分:0)

您可以通过获取按钮的父级向上遍历,然后对该控件执行FindControl()

Row parentRow = (Row)((Button)sender).Parent;

var tBox = (System.Web.UI.WebControls.TextBox)parentRow.FindControl("myTextBox")

您可能需要四处看看按钮嵌套的深度以及使用哪种控件类型来获取相应的父级。

答案 3 :(得分:0)

我的标记代码:

<asp:Repeater ID="RptFiles"  runat="server">
    <HeaderTemplate>
            <table>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                  <td>--</td>
                  <td><%#Eval("title")%></td>
                  <td>
                    <asp:FileUpload ID="fuVersion" runat="server" />
                    <asp:Button ID="btnUploadVersion" Text="Last opp" runat="server" OnClick="btnUploadVersion_Click" CommandArgument='<%#Eval("Id") %>' />
                  </td>
                </tr>
    </ItemTemplate>
        <FooterTemplate>
            </table>
    </FooterTemplate>
</asp:Repeater>

我的代码

protected void Upload_Click(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    var documentId = btn.CommandArgument;

    //Get the Repeater Item reference
    RepeaterItem item = btn.NamingContainer as RepeaterItem;

    var fuVersion = (FileUpload)item.FindControl("fuVersion");

    var filename = fuVersion.PostedFile.FileName      
}