单击GridView行上的任意位置以进入编辑模式

时间:2011-08-31 19:34:15

标签: asp.net gridview

我想在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 个答案:

答案 0 :(得分:6)

检查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 );
}

答案 1 :(得分:0)

我没有对此进行测试,因为我没有使用GridView,但我使用其他控件进行测试。您应该能够在行中放置隐藏按钮,并通过JavaScript调用行上的Click

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 );
}