ASP.NET GridView in scrollable DIV: Show selected row on click
By Peter Bromberg
Often you want to put your GridView inside a DIV tag with style overflow:auto
This shows your GridView inside a box and provides scrollbars to enable you to scroll down and select a row. It conserves page real estate where you do not want to use Paging on your GridView.
But if you click on a row, how to keep the selected row in focus after a postback?
Here is a simple solution:
<script type="text/javascript">
window.onload = function(){
var strCook = document.cookie;
if(strCook.indexOf("!~")!=0){
var intS = strCook.indexOf("!~");
var intE = strCook.indexOf("~!");
var strPos = strCook.substring(intS+2,intE);
document.getElementById('<%=grid1Div.ClientID %>').scrollTop = strPos;
}
}
function SetDivPosition(){
var intY = document.getElementById('<%=grid1Div.ClientID %>').scrollTop;
document.title = intY;
document.cookie = "yPos=!~" + intY + "~!";
}
</script>
<!-- This div will create scrollbars so that only a certain number of GridView rows are shown.
<div id="grid1Div" runat="server" style="overflow:auto; height:345px; width: 1300px;" onscroll="SetDivPosition()">
<asp:GridView ID="yourGrid" runat="server" Height="162px" Width="1275px" ...
</asp:GridView>
</div>
protected void yourGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onclick",
Page.ClientScript.GetPostBackEventReference(sender as GridView,
"Select$" + e.Row.RowIndex.ToString()));
}
}
protected void yourGrid_RowSelectionChanged(object sender, EventArgs e)
{
// this is fired from a postback when user clicks on a row in your grid
GridViewRow row = this.gridDocket.SelectedRow;
int y = row.DataItemIndex; // this is the index into your DataBound collection.
// your logic here
}
Download the code sample here
ASP.NET GridView in scrollable DIV: Show selected row on click (3849 Views)