C# 编辑GridView时如何避免行数据绑定?

C# 编辑GridView时如何避免行数据绑定?,c#,asp.net,gridview,rowdatabound,C#,Asp.net,Gridview,Rowdatabound,目前,我在RowDataBound中有以下代码: protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { Label groupID = (Label)e.Row.FindControl("idgroup"); Li

目前,我在RowDataBound中有以下代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Label groupID = (Label)e.Row.FindControl("idgroup");
            LinkButton myLink = (LinkButton)e.Row.FindControl("groupLink");
            myLink.Attributes.Add("rel", groupID.Text);
        }
}

但是,当我单击编辑链接时,它试图运行该代码并抛出一个错误。因此,如何仅在GridView处于读取模式时运行该代码?但在编辑时不能…

您可以添加如下检查:

if (e.Row.RowState != DataControlRowState.Edit)
{
  // Here logic to apply only on initial DataBinding...
}

添加对
e.Row.RowState
的检查:

if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
    //In Edit mode
}
在你看来,
搜索类似于OnrowDataBound=“GridView1\u RowDataBound”的OnrowDataBound事件,删除该代码并禁用上述代码

以下是如何做到这一点!它将只在行上执行代码(在读取或编辑模式下),正在编辑的行除外

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if ((e.Row.RowState == DataControlRowState.Normal) || (e.Row.RowState == DataControlRowState.Alternate))
            {
                Label groupID = (Label)e.Row.FindControl("idgroup");
                LinkButton myLink = (LinkButton)e.Row.FindControl("groupLink");
                myLink.Attributes.Add("rel", groupID.Text);
            }
        }
    }

戴维德的回答几乎是正确的。。但是,对于备用行,它将失败。以下是正确的解决方案:

if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState != DataControlRowState.Edit && e.Row.RowState != (DataControlRowState.Edit | DataControlRowState.Alternate))
{ 
    // Here logic to apply only on rows not in edit mode
}

此条件不适用,因为代码未运行(即使我没有单击“编辑”链接)。因此,RowDataBound中的代码永远不会运行。还有其他选择吗?提前谢谢+1.如代码注释中所述,当行处于编辑模式时执行此块。可以通过使用“!()”包装语句、使用“==”更改“>”或添加一个else块(以防您使用if块)来检查对立面(“不在编辑模式下”)。我刚刚尝试过,但在单击编辑链接时,它仍然会通过此条件。因此,它不会避免在编辑时运行代码。还有其他选择吗?感谢lota,您是否可以调试和检查e或e.Row对象的其他属性,以查看是否可以检测行的编辑状态并相应地采取行动?:)谢谢你的建议,伙计!正如您所提到的,我刚刚整理好调试和查看e.Row对象。只要stackoverflow允许我回答我自己的问题,我会尽快发布它。干杯您可以编辑您的问题,将结果放在底部。抱歉误解。我确实希望RowDataBound运行,但仅在GridView处于读取模式时运行(单击编辑链接后在编辑模式下为否)。无论如何谢谢你