我想在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 );
}
答案 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 );
}