Щелкните в любом месте строки GridView, чтобы войти в режим редактирования. - PullRequest
6 голосов
/ 31 августа 2011

Я хочу дублировать ту же функциональность кнопки редактирования, используя один щелчок в любом месте строки GridView.

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

Есть ли какие-либо предложения о том, как исправить это поведение?

Или есть ли лучший подход для достижения этой цели?

РЕДАКТИРОВАТЬ: Это было решено добавлением проверки для row.RowState.HasFlag( DataControlRowState.Edit ).Смотрите код ниже:

protected override void Render( System.Web.UI.HtmlTextWriter writer )
{
    foreach( GridViewRow row in gvwOrderItems.Rows )
    {
        if( row.RowType == DataControlRowType.DataRow &&
            row.RowState.HasFlag( DataControlRowState.Edit ) == false )
        {
            // enable click on row to enter edit mode
            row.Attributes["onclick"] =
                ClientScript.GetPostBackClientHyperlink( gvwOrderItems, "Edit$" + row.DataItemIndex, true );
        }
    }
    base.Render( writer );
}

Ответы [ 2 ]

7 голосов
/ 02 сентября 2011

Проверьте для row.RowState.HasFlag( DataControlRowState.Edit ).

protected override void Render( System.Web.UI.HtmlTextWriter writer )
{
    foreach( GridViewRow row in gvwOrderItems.Rows )
    {
        if( row.RowType == DataControlRowType.DataRow &&
            row.RowState.HasFlag( DataControlRowState.Edit ) == false )
        {
            // enable click on row to enter edit mode
            row.Attributes["onclick"] =
                ClientScript.GetPostBackClientHyperlink( gvwOrderItems, "Edit$" + row.DataItemIndex, true );
        }
    }
    base.Render( writer );
}
0 голосов
/ 01 сентября 2011

Я не проверял это, поскольку я не использую GridView, но я делаю это с другими элементами управления. Вы должны иметь возможность поместить скрытую кнопку в строку и вызвать Click в строке с помощью JavaScript:

protected override void Render( System.Web.UI.HtmlTextWriter writer )
{
    foreach( GridViewRow row in gvwOrderItems.Rows )
    {
        if( row.RowType == DataControlRowType.DataRow )
        {
            Button b = new Button();
            b.ID = "whatever";
            b.CommandName = "edit";
            b.Attributes.Add("style","display:none;")
            row.Controls.Add(b);
            // enable click on row to enter edit mode
            row.Attributes.Add("onclick" ,"document.getElementById('" bla.ClientID "').click();");
        }
    }
    base.Render( writer );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...