Поиск в какой строке была нажата кнопка в GridView / Repeater - PullRequest
1 голос
/ 20 октября 2011

Я обязуюсь Repeater. Каждая строка (это правильное слово?) В Repeater имеет Button и HiddenField. Как определить значение HiddenField в зависимости от того, какая кнопка была нажата?

Код для события OnClick Баттона:

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

edit : предложение CommandArgument от Pleun работает, но у меня все еще есть проблемы. Мне нужно найти строку (?) В Repeater, к которой принадлежит Button, поскольку в каждой строке также есть TextBox, и мне нужно ее значение. Поэтому в идеале я хочу получить эту строку и перейти к FindControl ("TextBox1") и т. Д. И т. Д. Извините, я должен был указать это в своем первоначальном вопросе

Ответы [ 4 ]

5 голосов
/ 20 октября 2011

Что мне нравится делать, так это добавлять 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

0 голосов
/ 15 декабря 2014

Мой код разметки:

<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      
}
0 голосов
/ 20 октября 2011

Вы можете перейти вверх, получив Родителя кнопки, затем сделав FindControl() для этого элемента управления.

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

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

Возможно, вам придется поиграть, чтобы увидеть, насколько глубоко вложена кнопка и с какими типами элементов управления добраться до соответствующего родителя.

0 голосов
/ 20 октября 2011

Если вы используете Repeater, вы можете идентифицировать элементы в каждой строке в ItemDataBound .

Если вы используете gridview, используйте RowDataBound

Надеюсь, это поможет

...