Вопрос по c#, asp.net – ASP GridView получить значения строк по нажатию кнопки

4

То, что я делаю, - сбросьте пароль пользователя при нажатии кнопки изображения.

Сделано до сих пор, - добавил GridViewCommandEventHandler, - он корректно срабатывает. Используя код изMSDN, Я получаю пустую строку ("quot;") для моего e.CommandArgument и выдает ошибку при запуске (не может "разобрать" на int).

Я вижу, что в отладчике есть "rowIndex" свойство хранится (правильно для моего клика) в другом месте в e, могу ли я получить к нему доступ? Я бы подумал, что код MSDN будет работать - есть ли что-то еще, что я сделал, чтобы эта ошибка произошла, или другой способ ее исправить? Благодарю.

void resetpassword(Object sender, GridViewCommandEventArgs e)
{
    // If multiple ButtonField columns are used, use the
    // CommandName property to determine which button was clicked.
    if (e.CommandName == "resetpass")
    {
        // Convert the row index stored in the CommandArgument
        // property to an Integer.
        int index = Convert.ToInt32(e.CommandArgument);

        // Retrieve the row that contains the button clicked
        // by the user from the Rows collection. Use the
        // CommandSource property to access the GridView control.
        GridView GridView1 = (GridView)e.CommandSource;
        GridViewRow row = GridView1.Rows[index];

        String usrname = row.FindControl("username").ToString();

код страницы aspx:

<asp:TemplateField HeaderText="Reset Password">
                <ItemTemplate>
                    <asp:ImageButton ID="ibtnReset" runat="server" CausesValidation="false" 
                        CommandName="resetpass" ImageUrl="~/Images/glyphicons_044_keys.png" Text="Button" />
                </ItemTemplate>
                <HeaderStyle Width="70px" />
                <ItemStyle HorizontalAlign="Center" />
            </asp:TemplateField>

Код добавления события:

 protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {
        GridView1.RowCommand += new GridViewCommandEventHandler(this.resetpassword);
    }

Ваш Ответ

2   ответа
4

CommandArgument(при условии, что вы хотите передать поле первичного ключа с именемPK):

 <asp:TemplateField>
    <ItemTemplate>                
      <asp:ImageButton runat="server" ID="ibtnReset"
        Text="reset password"
        CommandName="resetpass"
        CommandArgument='<%# Eval("Pk") %>'
    </ItemTemplate>
  </asp:TemplateField>

или получить ссылку наGridViewRow черезNamingContainer вашейImageButton:

WebControl wc = e.CommandSource as WebControl;
GridViewRow row = wc.NamingContainer as GridViewRow;
String usrname = ((TextBox)row.FindControl("username")).Text;

Вы также можете передать RowIndex как CommandArgument:

CommandArgument='<%# Container.DataItemIndex %>'

ButtonField класс автоматически заполняетCommandArgument свойство с соответствующим значением индекса. Для других командных кнопок вы должны вручную установитьCommandArgument свойство командной кнопки.

Error: User Rate Limit Exceeded Volvox
4

CommandArgument='<%# Container.DataItemIndex %>'

для вашего кода.

<asp:ImageButton ID="ibtnReset" runat="server" CausesValidation="false" 
        CommandArgument='<%# Container.DataItemIndex %>'
        CommandName="resetpass" ImageUrl="~/Images/glyphicons_044_keys.png" 
Text="Button" />

Вот вопрос по ТАASP.NET GridView RowIndex As CommandArgument для дальнейшего чтения.

The ButtonField class automatically populates the CommandArgument property with the appropriate index value.

Вот источник MSDN

Error: User Rate Limit Exceeded Volvox
Error: User Rate Limit ExceededButtonFieldError: User Rate Limit Exceeded

Похожие вопросы