Игнорировать GridView Row OnClick для последней ячейки

1

У меня есть GridView с несколькими столбцами. Когда вы нажимаете в любом месте строки, появляется PostBack с командой, за исключением последнего столбца, который является кнопкой Delete, которая имеет свою собственную команду, связанную с ней. Я могу сделать это, используя

protected override void Render(HtmlTextWriter writer)
    {
        foreach (GridViewRow r in CourtGrid.Rows)
        {
            if (r.RowType == DataControlRowType.DataRow)
            {
                //Clicking any cell will open the details page, except for the last cell, which is Delete
                for (int i = 0; i < r.Cells.Count - 1; ++i)
                {
                    r.Cells[i].Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(CourtGrid, "Edit$" + r.RowIndex, true);
                }

                //Much lighter page produced
                //r.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(CourtGrid, "Edit$" + r.RowIndex, true);
            }
        }

        base.Render(writer);
    }

Но это добавляет много дополнительных данных на страницу. В источнике указывается один столбец

<tr>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">ADAIM</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">Ada</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">Municipal</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">Ada</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">County</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">Ada</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">ID</td>
</tr>

Но если вы снова посмотрите на мой код, вы увидите, что строка прокомментирована

r.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(CourtGrid, "Edit$" + r.RowIndex, true);

Если я использую этот код, вместо этого получаю гораздо более легкий ряд

<tr onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">
<td>ADAIM</td>
<td>Ada</td>
<td>Municipal</td>
<td>Ada</td>
<td>County</td>
<td>Ada</td>
<td>ID</td>
</tr>

Но затем, когда нажата кнопка "Удалить", я получаю команды "Удалить" и "Редактировать", которые мне не нужны. Есть ли способ получить светлый результат реализации полной строки, все еще игнорируя эту последнюю ячейку?

Теги:
gridview

1 ответ

1

Это нормальное поведение. Случается, что последняя ячейка находится внутри строки, сначала происходит щелчок ячейки, а затем происходит событие щелчка строки. И я предполагаю, что вы можете использовать это поведение для барботирования событий, чтобы остановить распространение события click. Таким образом, когда происходит щелчок ячейки, вы должны остановить распространение события click. Например,

element.onclick = function(e){
    e.stopPropagation();
};

Этот пример JSFiddler демонстрирует его с помощью простой таблицы html. Итак, я думаю, это просто вопрос изменения обработчика события клика, чтобы вызвать обратную передачу и остановить распространение события, что похоже на это...

r.Attributes["onclick"] = string.Format(@"function(e){{
                   __doPostBack(&#{0};{1}&#{0};,&#{0};Edit$0&#{0};);                                     
                                   e.stopPropagation();

                           }}", r.RowIndex, CourtGrid.UniqueID);

Обратите внимание, что я не тестировал это, поэтому не делайте никаких предположений, но он должен дать вам представление о том, как добиться того же. Надеюсь, что это имеет смысл

Ещё вопросы

Сообщество Overcoder
Наверх
Меню