4

目前,我在 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 处于读取模式时运行该代码?但不是在编辑时...

4

5 回答 5

7

这是怎么做的!它只会在行上执行代码(在读取或编辑模式下),除了正在编辑的行!!!

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);
            }
        }
    }
于 2011-09-15T07:46:44.700 回答
6

您可以添加这样的检查:

if (e.Row.RowState != DataControlRowState.Edit)
{
  // Here logic to apply only on initial DataBinding...
}
于 2011-09-14T13:49:37.560 回答
2

Davide 的回答几乎是正确的。但是对于备用行它会失败。这是正确的解决方案:

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
}
于 2012-04-01T16:32:23.020 回答
2

添加检查e.Row.RowState

if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
    //In Edit mode
}
于 2011-09-14T13:50:25.563 回答
0

在您的 gridview 中,搜索 OnrowDataBound 事件,它将像 OnrowDataBound="GridView1_RowDataBound" 删除该代码并禁用上述代码。

于 2011-09-14T13:51:56.907 回答