2014-02-04 4 views
0

Привет, я использую элемент управления gridview для отображения данных. На клик определенной сетки я хочу получить этот идентификатор строк.gridview row selection load page everytime

Для этого я использовал этот код:

Protected Sub grdReport_SelectedIndexChanged(sender As Object, e As EventArgs) Handles grdReport.SelectedIndexChanged 
      Dim row As GridViewRow = Me.grdReport.SelectedRow 

     Dim InvoiceId As Integer = Convert.ToInt32(grdReport.DataKeys(row.RowIndex).Value) 
     Session("InvoiceId") = InvoiceId 


End Sub 

Protected Sub grdReport_RowCreated(sender As Object, e As GridViewRowEventArgs) Handles grdReport.RowCreated 
     If e.Row.RowType = DataControlRowType.DataRow Then 

      e.Row.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(Me.grdReport, "Select$" + e.Row.RowIndex.ToString())) 

     End If 
    End Sub 


Protected Overrides Sub Render(ByVal writer As HtmlTextWriter) 
    Dim gvr As GridViewRow 
    For Each gvr In grdReport.Rows 
     gvr.Attributes("onclick") = ClientScript.GetPostBackClientHyperlink(
       grdReport, 
       String.Concat("Select$", gvr.RowIndex), 
       True) 
    Next 

    MyBase.Render(writer) 
End Sub 

Приведенный выше код работает отлично для меня, но всякий раз, когда я нажимаю на GridView подряд, то он снова загружает страницы и страницы становится медленным.

, пожалуйста, дайте мне знать, что я могу сделать, поэтому вся страница не загружается снова и снова при нажатии на строку.

ответ

0

прежде всего selectedindexchanged не является хорошим событием, если вы хотите реакцию с событием мыши onClick.

SelectedIndexChanged всегда выполняется для каждой строки в сетке при заполнении данных

так что если у вас 100 строк кода получает исполненные в 100 раз, прежде чем у см сетке

я предложил бы использовать cellmousedown или cellmouseclick

Private Sub DataGridView_CellMouseDown(sender As System.Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView.CellMouseDown 

    If e.Button = Windows.Forms.MouseButtons.Left And e.RowIndex <> -1 And e.ColumnIndex <> -1 Then 

Dim InvoiceId As Integer = DataGridView.Rows(e.RowIndex).Cells("InvoiceId").value 

End Sub 

для ваших вопросов relaoding я предполагаю, что он должен делать с вашей визуализации суб вызова

я mho его ненужное для простой задачи u хочет выполнить