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

嗨,我使用上面的代碼來捕獲在Asp.net中的GridView中的行上的單擊事件。此代碼的工作原理,我能夠捕獲OnSelectdIndexChanged中新選擇的行,但回發也導致整個頁面刷新。如何取消由Page.ClientScript.GetPostBackClientHyperlink引起的頁面刷新?

有什麼辦法可以取消頁面刷新,但仍然可以在不添加'select'按鈕的情況下更改選定的行嗎?

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