O
OT Solutions, sales
Hello there,
I have a datagrid that has a select button (so the user can choose a
row) and also uses the datagrid sort.
If I have a smaller grid (say 150 rows) the response time of the sort
or select button (that just opens a popup with some information) is a
couple of seconds.
If I load in say 500 records into the datagrid (the load speed is
fine). As soon as I try and sort on a column, or select from the
grid, it takes about 20 seconds.
Does anyone know why this would be happening.
Any help would be appreciated,
Tom Olthoff
Here is a sample of the code:
<asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 8px;
POSITION: absolute; TOP: 80px" runat="server"
CellPadding="2" CellSpacing="2" AllowPaging="True"
AllowSorting="True" Font-Names="Arial"
Font-Size="Smaller" PageSize="1000" AutoGenerateColumns="False"
OnSortCommand="SortResults"
OnPageIndexChanged="PageResults"
OnItemDataBound="DataGrid1_ItemDataBound"
OnSelectedIndexChanged="DataGrid1_SelectedIndexChanged">
<SelectedItemStyle BackColor="#8080FF"></SelectedItemStyle>
<HeaderStyle BackColor="Silver"></HeaderStyle>
<Columns>
<asp:ButtonColumn Visible="False" Text="Select"
CommandName="Select"></asp:ButtonColumn>
<asp:BoundColumn DataField="PositionCode"
SortExpression="PositionCode" HeaderText="Position
Code"></asp:BoundColumn>
<asp:BoundColumn DataField="UserName" SortExpression="UserName"
HeaderText="User Name"></asp:BoundColumn>
<asp:BoundColumn DataField="Dept" SortExpression="Dept"
HeaderText="Department"></asp:BoundColumn>
<asp:BoundColumn DataField="Div" SortExpression="Div"
HeaderText="Division"></asp:BoundColumn>
<asp:BoundColumn DataField="ReplCycle" SortExpression="ReplCycle"
HeaderText="Replacement Cycle"></asp:BoundColumn>
<asp:BoundColumn DataField="ReplPolicy"
SortExpression="ReplPolicy" HeaderText="Replacement
Policy"></asp:BoundColumn>
</Columns>
<PagerStyle Visible="False" NextPageText="Next 5"
PrevPageText="Prev 5"></PagerStyle>
</asp:datagrid>
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
If Not Page.IsPostBack Then
BindData()
End If
End Sub
Sub BindData()
'1. Create a connection
Dim ConnectionString As String
Dim CommandText As String
Dim NewDV As DataView
Dim strSort As String
Dim strFilter As String
CommandText = "usp_GetPCs"
' Grab the connection from the global.asax file.
' (This is where the application variables are set)
ConnectionString = Application("sqlConnectionString")
Dim ds As New DataSet
ds = ViewState("DataSet")
If ds Is Nothing Then
Dim myConnection As New SqlConnection(ConnectionString)
Dim myCommand As New SqlDataAdapter(CommandText,
myConnection)
Dim ds2 As New DataSet
myCommand.Fill(ds2)
NewDV = ds2.Tables(0).DefaultView()
'Before DataBind - Add New Rows Here for Each Sub Heading
'We'll come back to this shortly!
strSort = "Dept, PositionCode"
ViewState("DataSet") = ds2
Else
strSort = ViewState("DataSort")
NewDV = ds.Tables(0).DefaultView()
ViewState("DataSet") = ds
End If
NewDV.Sort = strSort
DataGrid1.DataSource = NewDV
DataGrid1.DataBind()
ViewState("DataSort") = strSort
End Sub
Sub SortResults(ByVal sender As Object, ByVal e As
DataGridSortCommandEventArgs)
Dim strSort
Dim NewDS As DataSet
Dim NewDV As DataView
strSort = e.SortExpression
NewDS = ViewState("DataSet")
NewDV = NewDS.Tables(0).DefaultView
NewDV.Sort = strSort
ViewState("DataSort") = strSort
BindData()
End Sub
Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As
DataGridItemEventArgs)
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType =
ListItemType.AlternatingItem Then
e.Item.Attributes.Add("onmouseover",
"this.style.backgroundColor='Silver'")
e.Item.Attributes.Add("onmouseout",
"this.style.backgroundColor='White'")
Dim button As LinkButton = _
CType(e.Item.Cells(0).Controls(0), LinkButton)
e.Item.Attributes("onclick") = _
Page.GetPostBackClientHyperlink(button, "")
End If
End Sub
Sub EditRecord(ByVal PositionCode As Integer)
' Response.Redirect("AddActionType.aspx?ActionType_ID="
& ID)
' Response.Redirect("AddActionType.aspx?ActionType_ID="
& ID)
' Open the positionlist.aspx screen passing in the position
code
Response.Write("<script language='javascript'> {
window.open('PositionList.aspx?PositionCode=" & CStr(PositionCode) &
"'" & ",'PosWin','toolbar=no, height=690, width=990 ,top=20,left=20')
}</script>")
End Sub
Public Sub DataGrid1_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
DataGrid1.SelectedIndexChanged
' This is the event for the datagrid selection change (by
mouse click)
Dim ID As String
ID = DataGrid1.SelectedItem.Cells(1).Text
EditRecord(Val(ID))
End Sub
I have a datagrid that has a select button (so the user can choose a
row) and also uses the datagrid sort.
If I have a smaller grid (say 150 rows) the response time of the sort
or select button (that just opens a popup with some information) is a
couple of seconds.
If I load in say 500 records into the datagrid (the load speed is
fine). As soon as I try and sort on a column, or select from the
grid, it takes about 20 seconds.
Does anyone know why this would be happening.
Any help would be appreciated,
Tom Olthoff
Here is a sample of the code:
<asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 8px;
POSITION: absolute; TOP: 80px" runat="server"
CellPadding="2" CellSpacing="2" AllowPaging="True"
AllowSorting="True" Font-Names="Arial"
Font-Size="Smaller" PageSize="1000" AutoGenerateColumns="False"
OnSortCommand="SortResults"
OnPageIndexChanged="PageResults"
OnItemDataBound="DataGrid1_ItemDataBound"
OnSelectedIndexChanged="DataGrid1_SelectedIndexChanged">
<SelectedItemStyle BackColor="#8080FF"></SelectedItemStyle>
<HeaderStyle BackColor="Silver"></HeaderStyle>
<Columns>
<asp:ButtonColumn Visible="False" Text="Select"
CommandName="Select"></asp:ButtonColumn>
<asp:BoundColumn DataField="PositionCode"
SortExpression="PositionCode" HeaderText="Position
Code"></asp:BoundColumn>
<asp:BoundColumn DataField="UserName" SortExpression="UserName"
HeaderText="User Name"></asp:BoundColumn>
<asp:BoundColumn DataField="Dept" SortExpression="Dept"
HeaderText="Department"></asp:BoundColumn>
<asp:BoundColumn DataField="Div" SortExpression="Div"
HeaderText="Division"></asp:BoundColumn>
<asp:BoundColumn DataField="ReplCycle" SortExpression="ReplCycle"
HeaderText="Replacement Cycle"></asp:BoundColumn>
<asp:BoundColumn DataField="ReplPolicy"
SortExpression="ReplPolicy" HeaderText="Replacement
Policy"></asp:BoundColumn>
</Columns>
<PagerStyle Visible="False" NextPageText="Next 5"
PrevPageText="Prev 5"></PagerStyle>
</asp:datagrid>
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
If Not Page.IsPostBack Then
BindData()
End If
End Sub
Sub BindData()
'1. Create a connection
Dim ConnectionString As String
Dim CommandText As String
Dim NewDV As DataView
Dim strSort As String
Dim strFilter As String
CommandText = "usp_GetPCs"
' Grab the connection from the global.asax file.
' (This is where the application variables are set)
ConnectionString = Application("sqlConnectionString")
Dim ds As New DataSet
ds = ViewState("DataSet")
If ds Is Nothing Then
Dim myConnection As New SqlConnection(ConnectionString)
Dim myCommand As New SqlDataAdapter(CommandText,
myConnection)
Dim ds2 As New DataSet
myCommand.Fill(ds2)
NewDV = ds2.Tables(0).DefaultView()
'Before DataBind - Add New Rows Here for Each Sub Heading
'We'll come back to this shortly!
strSort = "Dept, PositionCode"
ViewState("DataSet") = ds2
Else
strSort = ViewState("DataSort")
NewDV = ds.Tables(0).DefaultView()
ViewState("DataSet") = ds
End If
NewDV.Sort = strSort
DataGrid1.DataSource = NewDV
DataGrid1.DataBind()
ViewState("DataSort") = strSort
End Sub
Sub SortResults(ByVal sender As Object, ByVal e As
DataGridSortCommandEventArgs)
Dim strSort
Dim NewDS As DataSet
Dim NewDV As DataView
strSort = e.SortExpression
NewDS = ViewState("DataSet")
NewDV = NewDS.Tables(0).DefaultView
NewDV.Sort = strSort
ViewState("DataSort") = strSort
BindData()
End Sub
Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As
DataGridItemEventArgs)
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType =
ListItemType.AlternatingItem Then
e.Item.Attributes.Add("onmouseover",
"this.style.backgroundColor='Silver'")
e.Item.Attributes.Add("onmouseout",
"this.style.backgroundColor='White'")
Dim button As LinkButton = _
CType(e.Item.Cells(0).Controls(0), LinkButton)
e.Item.Attributes("onclick") = _
Page.GetPostBackClientHyperlink(button, "")
End If
End Sub
Sub EditRecord(ByVal PositionCode As Integer)
' Response.Redirect("AddActionType.aspx?ActionType_ID="
& ID)
' Response.Redirect("AddActionType.aspx?ActionType_ID="
& ID)
' Open the positionlist.aspx screen passing in the position
code
Response.Write("<script language='javascript'> {
window.open('PositionList.aspx?PositionCode=" & CStr(PositionCode) &
"'" & ",'PosWin','toolbar=no, height=690, width=990 ,top=20,left=20')
}</script>")
End Sub
Public Sub DataGrid1_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
DataGrid1.SelectedIndexChanged
' This is the event for the datagrid selection change (by
mouse click)
Dim ID As String
ID = DataGrid1.SelectedItem.Cells(1).Text
EditRecord(Val(ID))
End Sub