我寫了一個 javascript function , 應對你有用.
function ScrollTable(grd,height,footer)
{
// Create elements
if(document.getElementById(grd)==null)
return;
var tblHeader = document.getElementById(grd).cloneNode(false);
var tblBody = document.getElementById(grd).cloneNode(false);
var tblfooter = document.getElementById(grd).cloneNode(false);
var divCntr = document.createElement("DIV");
tblHeader.removeAttribute("style");
tblBody.removeAttribute("style");
tblfooter.removeAttribute("style");
// Get column widths
var rgWidths = new Array();
for (var i = 0; i < document.getElementById(grd).rows[0].cells.length; i++)
{
rgWidths[i] = document.getElementById(grd).rows[0].cells[i].offsetWidth;
} // Add header row
var tbdyHeader = document.createElement("TBODY");
tblHeader.appendChild(tbdyHeader);
tbdyHeader.appendChild(document.getElementById(grd).rows[0].cloneNode(true));
if(footer==1)
{
var tbdyfooter = document.createElement("TBODY");
tblfooter.appendChild(tbdyfooter);
tbdyfooter.appendChild(document.getElementById(grd).rows[document.getElementById(grd).rows.length-1].cloneNode(true));
} // Add body rows
var tbdyBody = document.createElement("TBODY");
tblBody.appendChild(tbdyBody);
for (var i = 1; i < document.getElementById(grd).rows.length-footer; i++)
{
var oRow = document.getElementById(grd).rows[i].cloneNode(true);
tbdyBody.appendChild(oRow);
}
// Set up body container
divCntr.style.overflow = "auto";
divCntr.style.overflowY="scroll";
divCntr.style.height = height;
divCntr.appendChild(tblBody);
// Change existing table
for (var i = document.getElementById(grd).rows.length; i >0; i--)
{
document.getElementById(grd).rows[i-1].removeNode(true);
}
var tr1 = document.getElementById(grd).insertRow();
var td1 = tr1.insertCell();
var tr2 = document.getElementById(grd).insertRow();
var td2 = tr2.insertCell();
td1.appendChild(tblHeader);
td2.appendChild(divCntr);
if(footer==1)
{
var tr3 = document.getElementById(grd).insertRow();
var td3 = tr3.insertCell();
td3.appendChild(tblfooter);
}
// Set column widths of all but the last column
for (var i = 0; i < rgWidths.length-1 ; i++)
{
tblHeader.rows[0].cells[i].width = rgWidths[i];
if(tblBody.rows.length>0)
tblBody.rows[0].cells[i].width = rgWidths[i];
if(tblfooter.rows.length>0)
tblfooter.rows[0].cells[i].width = rgWidths[i];
} tblHeader.style.fontSize = "100%";
tblHeader.width = "100%";
tblHeader.style.tableLayout = "fixed";
tblHeader.border = 0; tblBody.style.fontSize = "100%";
tblBody.width = "100%";
tblBody.style.tableLayout = "fixed";
tblBody.border = 0;
if(footer==1)
{
tblfooter.style.fontSize = "100%";
tblfooter.style.width = "100%";
tblfooter.style.tableLayout = "fixed";
}
}
function ScrollTable(grd,height,footer)
{
// Create elements
if(document.getElementById(grd)==null)
return;
var tblHeader = document.getElementById(grd).cloneNode(false);
var tblBody = document.getElementById(grd).cloneNode(false);
var tblfooter = document.getElementById(grd).cloneNode(false);
var divCntr = document.createElement("DIV");
tblHeader.removeAttribute("style");
tblBody.removeAttribute("style");
tblfooter.removeAttribute("style");
// Get column widths
var rgWidths = new Array();
for (var i = 0; i < document.getElementById(grd).rows[0].cells.length; i++)
{
rgWidths[i] = document.getElementById(grd).rows[0].cells[i].offsetWidth;
} // Add header row
var tbdyHeader = document.createElement("TBODY");
tblHeader.appendChild(tbdyHeader);
tbdyHeader.appendChild(document.getElementById(grd).rows[0].cloneNode(true));
if(footer==1)
{
var tbdyfooter = document.createElement("TBODY");
tblfooter.appendChild(tbdyfooter);
tbdyfooter.appendChild(document.getElementById(grd).rows[document.getElementById(grd).rows.length-1].cloneNode(true));
} // Add body rows
var tbdyBody = document.createElement("TBODY");
tblBody.appendChild(tbdyBody);
for (var i = 1; i < document.getElementById(grd).rows.length-footer; i++)
{
var oRow = document.getElementById(grd).rows[i].cloneNode(true);
tbdyBody.appendChild(oRow);
}
// Set up body container
divCntr.style.overflow = "auto";
divCntr.style.overflowY="scroll";
divCntr.style.height = height;
divCntr.appendChild(tblBody);
// Change existing table
for (var i = document.getElementById(grd).rows.length; i >0; i--)
{
document.getElementById(grd).rows[i-1].removeNode(true);
}
var tr1 = document.getElementById(grd).insertRow();
var td1 = tr1.insertCell();
var tr2 = document.getElementById(grd).insertRow();
var td2 = tr2.insertCell();
td1.appendChild(tblHeader);
td2.appendChild(divCntr);
if(footer==1)
{
var tr3 = document.getElementById(grd).insertRow();
var td3 = tr3.insertCell();
td3.appendChild(tblfooter);
}
// Set column widths of all but the last column
for (var i = 0; i < rgWidths.length-1 ; i++)
{
tblHeader.rows[0].cells[i].width = rgWidths[i];
if(tblBody.rows.length>0)
tblBody.rows[0].cells[i].width = rgWidths[i];
if(tblfooter.rows.length>0)
tblfooter.rows[0].cells[i].width = rgWidths[i];
} tblHeader.style.fontSize = "100%";
tblHeader.width = "100%";
tblHeader.style.tableLayout = "fixed";
tblHeader.border = 0; tblBody.style.fontSize = "100%";
tblBody.width = "100%";
tblBody.style.tableLayout = "fixed";
tblBody.border = 0;
if(footer==1)
{
tblfooter.style.fontSize = "100%";
tblfooter.style.width = "100%";
tblfooter.style.tableLayout = "fixed";
}
}
datagrid1.Style.Add("TABLE-LAYOUT","fixed");
如果需要让某一列的宽度不变,可以这样:
<asp:BoundColumn>
<ItemStyle Width="100px"></ItemStyle>
</asp:BoundColumn>
则该列不会被挤憋。