2012-02-27 47 views
8

Tôi đang cố gắng để có một sự kiện onclick được thêm vào hàng sau khi dữ liệu được liên kết với một điều khiển web GridView. Mã bên dưới không thêm bất kỳ thuộc tính nào (đã kiểm tra nguồn xem khi trang được tạo) và, tất nhiên, không có chức năng nào được thêm vào. Ngay bây giờ, tôi đã có in onclick vào trang, nhưng cuối cùng nó sẽ liên kết đến một trang khác. Bất kỳ ý tưởng về những gì sai?Hàng Gridview ASP.NET trênclick

Ngoài ra, nhờ cộng đồng stackoverflow lớn. Cộng đồng này luôn là một trợ giúp lớn. Kế hoạch để đi qua một số bài viết bản thân mình cuối tuần này và bắt đầu trả lời các câu hỏi như tôi có thể để trả lại một chút.

C# server-side

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 client-side

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

Trả lời

9

Tôi đang sử dụng này trong RowDataBound của GridView của tôi, để thêm thuộc tính để chọn hàng:

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

Và điều này để bắt sự kiện khi người dùng nhấp vào hàng:

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

Có vẻ như bạn đang sử dụng máy chủ sự kiện onclick. Tôi đang liên kết lên một phương pháp javascript với sự kiện onclick của tôi. Tuy nhiên, vấn đề đầu tiên là nó thậm chí không thêm các thuộc tính vào ràng buộc dữ liệu, và tôi tin rằng tôi đang sử dụng cùng một phương pháp như bạn cho điều đó. Bạn có thấy sự khác biệt nào giữa phương pháp của tôi và của bạn không? – steventnorris

+0

Có, đó là máy chủ bên onclick. Nếu bạn cần một javascript onclick, tôi đề nghị bạn xác minh sự kiện của bạn (RowDataBound). GridView của bạn có chứa sự kiện? Cái gì đó như 'code'grv.RowDataBound + = dataTbl_RowDataBound' code'? Bởi vì cả hai phương pháp đều rất giống nhau. –

+0

... Tôi cảm thấy rất ngu ngốc. Cảm ơn bạn đã chỉ ra điều hiển nhiên. Khó gọi một phương thức nếu sự kiện thậm chí không biết làm như vậy. – steventnorris

3

Để làm điều này trong jQuery, bạn chỉ cần có được sự kiện hàng nhấp chuột như thế này:

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

Với điều đó, tôi khuyên bạn nên thiết lập ID TR để khóa chính cho các đối tượng được hiển thị trong hàng.

3

Có phải Grid được thiết lập để gọi dataTbl_RowDataBound sự kiện không? Nếu bạn gỡ lỗi với điểm ngắt trong sự kiện đó, sự kiện đó có bị sa thải không?

+0

Và sự ngu ngốc của những sai lầm nhỏ được thực hiện. Tôi đã gặp sự cố trong cuộc gọi sự kiện của mình. cảm ơn. – steventnorris

Các vấn đề liên quan