Получить индекс строки на событии Asp.net Rowcommand - PullRequest
31 голосов
/ 28 июня 2011

У меня есть 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 при событии команды строки?

Я хочу выделить (select) строку назначения при срабатывании RowCommand.

Ответы [ 6 ]

67 голосов
/ 28 июня 2011

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

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

int RowIndex = gvr.RowIndex; 
12 голосов
/ 11 марта 2014

Кнопка Image \ Button и т. Д.

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

Кодовый код

protected void gvProductsList_RowCommand(object sender, GridViewCommandEventArgs e)
{
    int index = e.CommandArgument;
}
4 голосов
/ 01 августа 2011

Если у вас есть встроенная команда GridView, такая как вставка, обновление или удаление, в строке команды вы можете использовать следующий код для получения индекса:

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

В пользовательской команде вы можете установить для аргумента команды значение yourRow.RowIndex.ToString() и затем вернуть его обратно в обработчик событий RowCommand. Если, конечно, вам не нужен аргумент команды для другой цели.

3 голосов
/ 22 июля 2017

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

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

int RowIndex = row.RowIndex; 
1 голос
/ 27 июля 2015

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

Вот мое решение:

GridViewRow gvr = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
string typecore = gvr.Cells[3].Text.ToString().Trim();
1 голос
/ 04 августа 2012
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)
    {

    }
}
...