【问题标题】:How to avoid RowDataBound when GridView is edited?编辑GridView时如何避免RowDataBound?
【发布时间】:2012-04-02 00:32:23
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net gridview rowdatabound


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可以像这样添加支票:

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

      【讨论】:

      • 我刚刚尝试过,但是当点击编辑链接时,它仍然通过了这个条件。因此,它并没有避免在编辑时运行代码。还有其他选择吗?非常感谢
      • 您能否调试并检查 e 或 e.Row 对象的其他属性,看看您是否可以检测到行的编辑状态并采取相应措施? :)
      • 感谢您的建议!正如你提到的,我刚刚整理了调试并查看了 e.Row 对象。一旦 stackoverflow 允许我回答我自己的问题,我就会发布它。干杯!
      • 您可以编辑您的问题,将调查结果放在底部。
      【解决方案3】:

      e.Row.RowState添加支票:

      if ((e.Row.RowState & DataControlRowState.Edit) > 0)
      {
          //In Edit mode
      }
      

      【讨论】:

      • 这个条件不适合,因为代码没有运行(即使我没有点击“编辑”链接)。因此,RowDataBound 中的代码永远不会运行。还有其他选择吗?提前致谢!
      • +1。如代码注释中所述,此块在行处于编辑模式时执行。检查相反的(“不在编辑模式”)可以通过用“!()”包装语句,用“==”更改“>”或添加一个else块来完成(如果你有使用if 块)。
      【解决方案4】:

      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
      }
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 抱歉造成误会。我确实希望 RowDataBound 运行,但仅当 GridView 处于阅读模式时(单击编辑链接后不处于编辑模式)。还是谢谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-01
        • 1970-01-01
        • 2013-01-14
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多