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

次のチェックを追加しe.Row.RowStateます:

if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
    //In Edit mode
}
于 2011-09-14T13:50:25.563 に答える
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 に答える
0

グリッドビューで、OnrowDataBound = "GridView1_RowDataBound"のようなOnrowDataBoundイベントを検索して、そのコードを削除し、上記のコードを無効にします。

于 2011-09-14T13:51:56.907 に答える