C# Tutorials and offshore development in India
    Tutorials   Resources   Forum   Communities   Interview   Jobs   Projects   Offshore Development    
Silverlight Tutorials | Mentor | Code Converter | Articles | Code Factory | Computer Jokes | Members | Peer Appraisal | IT Companies | Bookmarks | Revenue Sharing |


Prizes & Awards
My Profile



Active Members
TodayLast 7 Days more...

New Feature: Community Sites: Create your own .NET community website and start earning from Google AdSense ! It's Free !




Gridview Resizable column


Posted Date: 06 Jun 2008    Resource Type: Code Snippets    Category: ASP.NET GridView

Posted By: Kumar Velu       Member Level: Diamond
Rating:     Points: 10



Following code help us to implement resizable gridview column:i have used css and javascript

In aspx:

<asp:GridView ID="grdtemp" runat=”server” CssClass="mytable" AutoGenerateColumns="true" onmouseup="TableResize_OnMouseUp(this);"
onmousedown="TableResize_OnMouseDown(this);">


JAVASCRIPT CODE:

var oResizeTarget = null;
var iStartX = null;
var iEndX = null;
var iSizeX = null;
var sResizableElement = "TH";
var iResizeThreshold = 8;
var iEdgeThreshold = 8;
var iSizeThreshold = 20;
var sVBarID = "VBar";

function TableResize_CreateVBar()
{
// Returns a reference to the resizer VBar for the table
var objItem = document.getElementById(sVBarID);

// Check if the item doesn't yet exist
if (!objItem)
{
// and Create the item if necessary
objItem = document.createElement("SPAN");

// Setup the bar
objItem.id = sVBarID;
objItem.style.position = "absolute";
objItem.style.top = "0px";
objItem.style.left = "0px";
objItem.style.height = "0px";
objItem.style.width = "2px";
objItem.style.background = "silver";
objItem.style.borderLeft = "1px solid black";
objItem.style.display = "none";

// Add the bar to the document
document.body.appendChild(objItem);
}
}

window.attachEvent("onload", TableResize_CreateVBar);

function TableResize_GetOwnerHeader(objReference)
{
var oElement = objReference;

while (oElement != null && oElement.tagName != null && oElement.tagName != "BODY")
{
if (oElement.tagName.toUpperCase() == sResizableElement)
{
return oElement;
}

oElement = oElement.parentElement;
}

// The TH wasn't found
return null;
}

function TableResize_GetFirstColumnCell(objTable, iCellIndex)
{
var oHeaderCell = objTable.rows(0).cells(iCellIndex);

return oHeaderCell;
}
function TableResize_CleanUp()
{
// Void the Global variables and hide the resizer VBar.
var oVBar = document.getElementById(sVBarID);

if (oVBar)
{
oVBar.runtimeStyle.display = "none";
}

iEndX = null;
iSizeX = null;
iStartX = null;
oResizeTarget = null;
oAdjacentCell = null;

return true;
}
function TableResize_OnMouseMove(objTable)
{
// Change cursor and store cursor position for resize indicator on column
var objTH = TableResize_GetOwnerHeader(event.srcElement);

if (!objTH)
return;

var oVBar = document.getElementById(sVBarID);

if (!oVBar)
return;

var oAdjacentCell = objTH.nextSibling;

// Show the resize cursor if we are within the edge threshold.
if ((event.offsetX >= (objTH.offsetWidth - iEdgeThreshold)) && (oAdjacentCell != null))
{
objTH.runtimeStyle.cursor = "e-resize";
}
else
{
if(objTH.style.cursor)
{
objTH.runtimeStyle.cursor = objTH.style.cursor;
}
else
{
objTH.runtimeStyle.cursor = "";
}
}
if (oVBar.runtimeStyle.display == "inline")
{
// We have to add the body.scrollLeft in case the table is wider than the view window
// where the table is entirely within the screen this value should be zero...
oVBar.runtimeStyle.left = window.event.clientX + document.body.scrollLeft;

document.selection.empty();
}

return true;
}
function TableResize_OnMouseDown(objTable)
{
// Record start point and show vertical bar resize indicator
var oTargetCell = event.srcElement;

if (!oTargetCell)
return;

var oVBar = document.getElementById(sVBarID);

if (!oVBar)
return;

if (oTargetCell.parentElement.tagName.toUpperCase() == sResizableElement)
{
oTargetCell = oTargetCell.parentElement;
}

var oHeaderCell = TableResize_GetFirstColumnCell(objTable, oTargetCell.cellIndex);

if ((oHeaderCell.tagName.toUpperCase() == sResizableElement) && (oTargetCell.runtimeStyle.cursor == "e-resize"))
{
iStartX = event.screenX;
oResizeTarget = oHeaderCell;

// Mark the table with the resize attribute and show the resizer VBar.
// We also capture all events on the table we are resizing because Internet
// Explorer sometimes forgets to bubble some events up.
// Now all events will be fired on the table we are resizing.
objTable.setAttribute("Resizing", "true");
objTable.setCapture();

// Set up the VBar for display

// We have to add the body.scrollLeft in case the table is wider than the view window
// where the table is entriely within the screen this value should be zero...
oVBar.runtimeStyle.left = window.event.clientX + document.body.scrollLeft;

oVBar.runtimeStyle.top = objTable.parentElement.offsetTop + objTable.offsetTop;;
oVBar.runtimeStyle.height = objTable.parentElement.clientHeight;
oVBar.runtimeStyle.display = "inline";
}

return true;
}

function TableResize_OnMouseUp(objTable)
{
// Resize the column and its adjacent sibling if position and size are within threshold values
var oAdjacentCell = null;
var iAdjCellOldWidth = 0;
var iResizeOldWidth = 0;

if (iStartX != null && oResizeTarget != null)
{
iEndX = event.screenX;
iSizeX = iEndX - iStartX;

// Mark the table with the resize attribute for not resizing
objTable.setAttribute("Resizing", "false");

if ((oResizeTarget.offsetWidth + iSizeX) >= iSizeThreshold)
{
if (Math.abs(iSizeX) >= iResizeThreshold)
{
if (oResizeTarget.nextSibling != null)
{
oAdjacentCell = oResizeTarget.nextSibling;
iAdjCellOldWidth = (oAdjacentCell.offsetWidth);
}
else
{
oAdjacentCell = null;
}

iResizeOldWidth = (oResizeTarget.offsetWidth);
oResizeTarget.style.width = iResizeOldWidth + iSizeX;

if ((oAdjacentCell != null) && (oAdjacentCell.tagName.toUpperCase() == sResizableElement))
{
oAdjacentCell.style.width = (((iAdjCellOldWidth - iSizeX) >= iSizeThreshold)?(iAdjCellOldWidth - iSizeX):(oAdjacentCell.style.width = iSizeThreshold))
}
}
}
else
{
oResizeTarget.style.width = iSizeThreshold;
}
}

// Clean up the VBar and release event capture.
TableResize_CleanUp();
objTable.releaseCapture();

return true;
}

css content:

.tablecontainer
{
position: absolute;
}

.mytable
{
table-layout: fixed;
}

.mytable TD, .mytable TH
{
border: solid 1px black;
width: 120px;
}

.mytable TH
{
background-color: #e0e0e0;
}





Responses

Author: Kapil Dhawan    17 Jun 2008Member Level: Gold   Points : 2
Hello
Nice piece of code
Thanks for sharing your knowledge with us.
I hope to see more good code from your side
This code is going to help lots of guys.
Ton Thanks to you
Regards,
Kapil



Feedbacks      
Popular Tags   What are tags ?   Search Tags  
(No tags found.)

Post Feedback


This is a strictly moderated forum. Only approved messages will appear in the site. Please use 'Spell Check' in Google toolbar before you submit.
You must Sign In to post a response.
Next Resource: How to clear a datagridview
Previous Resource: Generating serial number in gridview
Return to Discussion Resource Index
Post New Resource
Category: ASP.NET GridView


Post resources and earn money!
 
Related Resources



dotNet Slackers   BizTalk Adaptors    Web Design

masks masks masks

Contact Us    Privacy Policy    Terms Of Use