2012-02-27 8 views
8

データがgridview webcontrolにバインドされると、onclickイベントを行に追加しようとしています。以下のコードでは、属性を追加していません(ページが作成されるとviewsourceをチェックしています)。もちろん、機能は追加されていません。今、私はちょうどそのページに印刷するonclickを持っていますが、結局それは別のページにリンクします。何が間違っているかについてのアイデア?ASP.NET gridview行onclick

また、stackoverflowコミュニティのおかげで、このコミュニティはいつも大きな助けになってきました。私は今週末にいくつかの記事を読んで、少し返信できるように質問に答えようと計画しています。

C#サーバ側

protected void dataTbl_RowDataBound(GridViewRowEventArgs e){ 
      e.Row.Attributes.Add("id",e.Row.Cells[0].Text); 
      e.Row.Attributes.Add("onclick", "rowClick('"+e.Row.RowIndex+"')"); 

     } 

Javascriptのクライアント側

function rowClicked(counter){ 
    document.write(counter); 
} 

答えて

9

私は、行を選択するために属性を追加するために、私のGridViewのRowDataBoundでこれを使用しています:

protected void grvSearch_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    try 
    { 
     switch (e.Row.RowType) 
     { 
      case DataControlRowType.Header: 
       //... 
       break; 
      case DataControlRowType.DataRow: 
       e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#93A3B0'; this.style.color='White'; this.style.cursor='pointer'"); 
       if (e.Row.RowState == DataControlRowState.Alternate) 
       { 
        e.Row.Attributes.Add("onmouseout", String.Format("this.style.color='Black';this.style.backgroundColor='{0}';", grvSearch.AlternatingRowStyle.BackColor.ToKnownColor())); 
       } 
       else 
       { 
        e.Row.Attributes.Add("onmouseout", String.Format("this.style.color='Black';this.style.backgroundColor='{0}';", grvSearch.RowStyle.BackColor.ToKnownColor())); 
       } 
       e.Row.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(grvSearch, "Select$" + e.Row.RowIndex.ToString())); 
       break; 
     } 
    } 
    catch 
    { 
     //...throw 
    } 
} 

ユーザーが行をクリックしたときにイベントをキャッチする:

protected void grvSearch_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     //Do wherever you want with grvSearch.SelectedIndex     
    } 
    catch 
    { 
     //...throw 
    } 
} 
+0

あなたがonclickイベントのサーバー側を使用しているようです。私はonclickイベントでjavascriptメソッドをリンクしています。しかし、最初の問題は、データバインドの属性を追加することさえありません、私はあなたと同じ方法を使用していると信じています。私の方法とあなたの違いが分かりましたか? – steventnorris

+0

はい、サーバー側のonclickです。 javascript onclickが必要な場合は、イベント(RowDataBound)を確認することをお勧めします。あなたのGridViewにはイベントが含まれていますか? 'code'grv.RowDataBound + = dataTbl_RowDataBound' code'のようなもの?両方の方法が非常に似ているからです。 –

+0

...私はとても愚かだと感じます。明白なことを指摘していただきありがとうございます。イベントがそうすることさえ知らなければ、メソッドを呼び出すのは難しいです。 – steventnorris

3

にjQueryでこれを行うには、単純にこのような行をクリックしてイベントを取得:それと

$(document).ready(function() { 
    var clickCnt = 0; 
    $('table tr').click(function(){ 
     clickCnt++; 
     //Do something 
    }); 
}); 

を、私は、表示されたオブジェクトへのプライマリキーにTR IDを設定することをお勧めします行

3

GriddataTbl_RowDataBoundイベントを呼び出すように設定されていますか?そのイベントでブレークポイントを使用してデバッグする場合、そのイベントは起動されますか?

+0

そして小さなミスの愚かさが作られます。イベントコールで問題が発生しました。ありがとう。 – steventnorris