2012-03-09 7 views
0

次のコードとRaisePostBackEvent関数を使用して、GridViewのクリック可能な行を作成しました。GridViewのDropDownListを含む行をクリック可能にして、DropDownListを破棄します。

protected void gvResults_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     e.Row.Attributes.Add("onclick", ClientScript.GetPostBackEventReference(this, e.Row.RowIndex.ToString())); 
    } 
} 

GridViewには、いずれかのセルのDropDownListコントロールもあります。問題は、DropDownListをクリックして選択を変更すると、その行のonclickがトリガーされることです。これにより、DropDownListのオプションリストが表示されますが、行のonclickも処理されているため使用できなくなります。

DropDownListのonmouseoverにフラグを設定し、RaisePostBackEvent関数でそのフラグをチェックしようとしましたが、これは部分的にしか成功しませんでした。これにより、RaisePostBackEventの機能が無効になりましたが、行onclickが発生しても、DropDownListはまだ使用できない状態になっています。

したがって、行の他の部分がクリックされたときにonclickが機能するようにしながら、DropDownList関数を作成するにはどうすればよいですか?

注:現在、.NET 2.0での作業は制限されています。

+1

この投稿を参照してください:http://stackoverflow.com/questions/6491627/prevent-table-row-onclick-event-to-fire-when-clicking-button-inside-therow – jmaglio

答えて

1

あなたがしたいことは、Clickイベントの伝播を停止することです。これを行う最も簡単な方法は、伝播停止しDIV/span要素内の要素をラップするために、次のようになります。他のブラウザでのstopPropagationを使用しながら、

<div onclick="if (event.stopPropagation){ event.stopPropagation(); } else if(window.event){ window.event.cancelBubble=true; } "> 
DropDownList element here... 
</div> 

IEは、event.cancelBubbleプロパティを使用しています。

GridViewでDropDownList要素をどのように生成しているのかよく分かりません。ItemTemplateでこれを追加するか、RowCreatedイベントで要素を作成するときに追加する方法があります。

関連する問題