2016-10-11 2 views
3
r.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink((Control)this.gridView, "Select$" + r.RowIndex); 

안녕하세요, 나는 위의 코드를 사용하여 Asp.net의 GridView 행에 대한 클릭 이벤트를 잡습니다.이 코드는 작동하며 OnSelectdIndexChanged에서 새로 선택된 행을 catch 할 수 있지만 다시 게시 할 수도 있습니다. 전체 페이지를 새로 고칩니다.Page.ClientScript.GetPostBackClientHyperlink에 의한 페이지 새로 고침을 어떻게 취소합니까?

페이지 새로 고침을 취소하지만 '선택'버튼을 추가하지 않고도 선택한 행을 변경하는 방법이 있습니까?

+1

"새로 선택한 행"으로 무엇을 하시겠습니까? 코드에서 수행 할 작업이 필요하다면 다시 게시가 필요합니다. 그렇다면 [UpdatePanel] (https://msdn.microsoft.com/en-us/library/bb399001.aspx)을 사용할 수 있습니다. 프런트 엔드에서만 무언가를해야하는 경우 다른 접근 방식을 취해야합니다. – VDWWD

+0

페이지가 새로 고쳐지면 선택한 항목의 세부 정보 페이지로 이동할 수있는 색인이 클릭되었을 뿐이므로 사이트의 속도가 느려지는 몇 가지 API 호출이 있으면 업데이트를 살펴볼 것입니다. 패널, 감사합니다 – Litrico

답변

2

이렇게하려면 GridView에서 RowCreated 이벤트가 필요합니다. 아래의 예제 참조 :

protected void GridView1_RowCreated(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) { 
     e.Row.Attributes["onmouseover"] = "this.style.cursor='pointer';this.style.textDecoration='underline';"; 
     e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';"; 
     e.Row.ToolTip = "Click to select row"; 
     e.Row.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(this.GridView1, "Select$" + e.Row.RowIndex); 
    } 
} 

당신은 선택 버튼없이 선택 행에 대한 자세한 내용은이 링크를 볼 수 있습니다 - How to implement full row selecting in GridView without select button?

가 다시 게시를 방지하기 위해, 나는 이전에 주석하고 삭제 UpdatePanel을 사용하는 것이 좋습니다. 다음은 GridView를 UpdatePanel에 넣는 샘플입니다.

<asp:ScriptManager ID=" ScriptManager1" runat="server"/> 
    <asp:UpdatePanel ID=" UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> 
      </asp:GridView> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

약간의 코드입니다. 그래서 나는 코멘트 섹션에서 링크를 공유하고 있습니다. 확인해주십시오.

+0

답변 주셔서 감사합니다,하지만 이것은 내가하고있는 일입니다. 포스트 백은 페이지가 새로 고침되도록하지만 그 새로 고침을 취소하고 싶거나 그냥 어떻게 든 발생하지 않도록하십시오. – Litrico

+0

늦은 답신에 신경 쓰지 마십시오. 나는 UpdatePanel을 생각하고 있었다. 이 링크 - http://csharpdotnetfreak.blogspot.com/2012/08/select-gridview-row-onclick-of-cell-javascript.html?m=1 알려주세요. –

+0

도움을 주셔서 감사합니다. 업데이트 패널을 살펴 보겠습니다. – Litrico

1

OnRowDataBound 이벤트를 사용하여 GridView에 특성을 추가 할 수 있습니다.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      //add the current row number 
      e.Row.Attributes.Add("rowNumber", e.Row.RowIndex.ToString()); 

      //add an item from the database 
      e.Row.Attributes.Add("itemID", DataBinder.Eval(e.Row.DataItem, "database_id").ToString()); 

      //or add a click directy and redirect with javascript 
      e.Row.Attributes.Add("onclick", "location.href='/newPage.aspx?id=" + DataBinder.Eval(e.Row.DataItem, "database_id").ToString() + "'"); 
     } 
    } 

제 발췌문에서 세 번째 속성을 사용하지 않으면 clientside 행을 처리해야합니다. 당신은 jQuery로 그렇게 할 수 있습니다.

<script type="text/javascript"> 
     $(document).ready(function() { 
      $("#<%= GridView1.ClientID %> tr").click(function() { 
       var rowNumber = $(this).attr("rowNumber"); 
       var itemID = $(this).attr("itemID"); 
       alert("This is row number: " + rowNumber + ". It has ID: " + itemID); 
      }) 
     }); 
    </script> 
관련 문제