Подтвердить что ты не робот

Получить индекс Row в событии Rowcommand от Asp.net

У меня есть asp.net Gridview.

<asp:TemplateField HeaderText="View Faktor" ShowHeader="False" Visible="True">
                <ItemTemplate>
                    <asp:ImageButton ID="imgBtn1" CssClass="SelectRow" runat="server" CausesValidation="false"
                        CommandArgument='<%#(eval("mprID")) %>' CommandName="ViewFactors" ImageUrl="~/tadarokat/Images/factor.png"
                        Text="" />
                </ItemTemplate>
            </asp:TemplateField>

Как я могу получить rowIndex в командном событии команды?
Я хочу выделить (выбрать) целевую строку при запуске Rowcommand.

4b9b3361

Ответ 1

это ответ на ваш вопрос.

GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);

int RowIndex = gvr.RowIndex; 

Ответ 2

ImageButton\Button и т.д.

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

код-за

protected void gvProductsList_RowCommand(object sender, GridViewCommandEventArgs e)
{
    int index = e.CommandArgument;
}

Ответ 3

Если вы создали встроенную команду gridview, например insert, update delete, в команде row вы можете получить код строки, чтобы получить индекс.

  int index = Convert.ToInt32(e.CommandArgument);

Ответ 4

 protected void gvProductsList_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        try
        {
            if (e.CommandName == "Delete")
            {
                GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
                int RemoveAt = gvr.RowIndex;
                DataTable dt = new DataTable();
                dt = (DataTable)ViewState["Products"];
                dt.Rows.RemoveAt(RemoveAt);
                dt.AcceptChanges();
                ViewState["Products"] = dt;
            }
        }
        catch (Exception ex)
        {
            throw;
        }
    }
    protected void gvProductsList_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            gvProductsList.DataSource = ViewState["Products"];
            gvProductsList.DataBind();
        }
        catch (Exception ex)
        {

        }
    }

Ответ 5

Я смог использовать ответ rahularyansharma выше в моем собственном проекте с одной незначительной модификацией. Мне нужно было получить значение конкретных ячеек в строке, на которую пользователь щелкает ссылку LinkButton. Вторая строка может быть изменена, чтобы получить значение как можно большего количества ячеек. Вот мое решение:

    GridViewRow gvr = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
    string typecore = gvr.Cells[3].Text.ToString().Trim();

Ответ 6

Или вы можете использовать класс control вместо своих типов:

GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer);

int RowIndex = row.RowIndex;