当前位置:早雪网网络学院编程文档网站制作 → 模拟Windows Listview的HTC组件

模拟Windows Listview的HTC组件

减小字体 增大字体 作者:未知  来源:从互联网收集整理并转载  发布时间:2005-6-3 0:56:07

 //分隔条
 with (columns[colIndex].splitter)
 {
  position = "absolute" ;
  if (freezeCols == 'false')
   onmousedown = new Function("splitterDown(" + colIndex + ")");
 }
 with (columns[colIndex].splitter.style)
 {
  left = headerWidth - 4;
  width = 4;
  height = 20;
  if (freezeCols == 'false')
   cursor = "col-resize";
  backgroundImage = "url(" + splitterImage + ")";
 }
 header.insertAdjacentElement("beforeEnd", columns[colIndex].splitter);

 //调整dataTable的宽度
 dataTable.width = headerWidth - 2;
}

//内部函数,事件onresize
function resize()
{
 with (bodySpan.style)
 {
  width = parseInt(element.clientWidth);
  height = parseInt(element.clientHeight) - 20;
 }
}

//内部函数,体滚动事件onscroll
function bodyScroll()
{
 header.style.marginLeft = (-window.event.srcElement.scrollLeft) ;
}

//取消选择
function cancelSelect()
{
 with (window.event)
 {
  cancelBubble = true ;
  returnValue = false ;
 }
 return false ;
}

var downSpliterIndex = -1;
var eventX1;
var eventX2;

//内部函数,分隔条点下
function splitterDown(index)
{
 with (window.event)
 {
  eventX1 = parseInt(clientX);
  cancelBubble = true;
  returnValue = false;
 }
 element.setCapture();

 downSpliterIndex = index;
 downType = 1;
 with (objSizeItem.style)
 {
  top = element.offsetTop;
  height = element.offsetHeight;
  posLeft = window.event.clientX - 3;
  visibility = "visible";
 }
}

//内部函数,事件onmousemove
function mouseMove()
{
 switch (true)
 {
  case downType == 1:
   objSizeItem.style.posLeft = window.event.clientX - 2;
  break;

  default:
  break;
 }
}

//内部函数,事件onmouseup
function mouseUp()
{
 if (downType == -1)
  return;
  
 with (window.event)
 {
  eventX2 = parseInt(clientX);
  cancelBubble = true;
  returnValue = false;
 }

 switch (true)
 {
  case downType == 1:
   var dx = eventX2 - eventX1;
   var colWidth = parseInt(columns[downSpliterIndex].colHeader.style.width);
   if (colWidth + dx < 1) dx = 1-colWidth;
   colWidth += dx;
   columns[downSpliterIndex].colHeader.style.width = colWidth;
   dataTable.width = parseInt(dataTable.width) + dx;

   for (var i = 0; i < rows.length; ++i)
   {
    //setRowCss(rows[i]);
    for (var j = 0; j < columns.length; ++j)
    {
     if (j == 0)
      rows[i].children[j].style.width = parseInt(columns[j].colHeader.style.width) + 2;
     else
      rows[i].children[j].style.width = parseInt(columns[j].colHeader.style.width) + 4;
    }
   }

   setColWidth();

   header.style.marginLeft = (-bodySpan.scrollLeft);
  break;

  default:
  break;
 }
 
 element.releaseCapture();
 objSizeItem.style.visibility = "hidden";
 downType = -1;
}

//行的事件:click
function clickRow(rowIndex)
{
 if (!window.event.ctrlKey || singleSelect == 'true')
 {
  for (var i = 0; i < selectedRows.length; ++i)
  {
   if (selectedRows[i].rowIndex >= 0)
    selectRow(selectedRows[i].rowIndex, false);
  }
  selectedRows.length = 0;
 }

 if (rowIndex >= 0)
  selectRow(rowIndex, !rows[rowIndex].selected);
}

//内部函数,设置一行选种样式
function setRowCss(row, selected)
{
 if (selected == null)
  selected = row.selected;
 if (selected == null)
  selected = false;

 if (!selected)
 {
  if (row.rowIndex % 2 == 0)
  {
   for (var i = 0; i < row.children.length; ++i)
    row.children[i].style.cssText = columns[i].style1;
  }
  else
  {
   for (var i = 0; i < row.children.length; ++i)
    row.children[i].style.cssText = columns[i].style2;
  }
 }
 else
 {
  if (row.rowIndex % 2 == 0)
  {
   for (var i = 0; i < row.children.length; ++i)
    row.children[i].style.cssText = columns[i].style11;
  }
  else
  {
   for (var i = 0; i < row.children.length; ++i)
    row.children[i].style.cssText = columns[i].style22;
  }
 }

 for (var i = 0; i < row.children.length; ++i)
 {
  if (i == 0)
   row.children[i].style.width = parseInt(columns[i].colHeader.style.width) + 2;
  else
   row.children[i].style.width = parseInt(columns[i].colHeader.style.width) + 4;
 }

 row.selected = selected
}

//方法实现,设置某一行的选种状态
function selectRow(rowIndex, selected)
{
 var row = rows[rowIndex];
 if (row == null)
  return row;

 if (selected)
 {
  setRowCss(row, true);

  if (selectedRows.length > 0 && selectedRows[selectedRows.length - 1].rowIndex == rowIndex);
  else
  {
   selectedRows[selectedRows.length] = row;
   selChange.fire();
  }
 }
 else
 {
  setRowCss(row, false);
 }
 
 return row;
}

//方法实现
function clearSelect()
{
 clickRow(-1);
}

//内部函数
function setColWidth()
{
 if (rows.length <= 0)
  return;
  
 var tableWidth = 0;
 for (var i = 0; i < columns.length; ++i)
 {
  if (i == 0)
   columns[i].colHeader.style.width = rows[0].children[i].clientWidth - 2;
  else
   columns[i].colHeader.style.width = rows[0].children[i].clientWidth - 4;

  tableWidth += parseInt(columns[i].colHeader.style.width) + 4;
 }
 dataTable.width = tableWidth - 2;
}

//方法实现
function addRow(rowData)
{
 var row = dataTable.insertRow();
 row.onmousedown = new Function("clickRow(" + row.rowIndex + ")");
 row.ondblclick = new Function("var eventObject = createEventObject();eventObject.rowIndex = "
  + row.rowIndex + ";wantEdit.fire(eventObject);");

 for (var i = 0; i < rowData.length; ++i)
 {
  var td = row.insertCell();
  td.innerHTML = rowData[i];
 }
 setRowCss(row, false);

 //setColWidth();
 
 return row;
}

Array.prototype.remove = function(dx)
{
 if(isNaN(dx)||dx>this.length){return false;}
 this.splice(dx, 1);
}

//方法实现
function delRow(rowIndex)
{
 dataTable.deleteRow(rowIndex);
 
 //重新格式化
 for (var i = 0; i < rows.length; ++i)
 {
  rows[i].onmousedown = new Function("clickRow(" + i + ")");
  rows[i].ondblclick = new Function("wantEdit.fire(" + i + ")");
  setRowCss(rows[i], false);
 }
 
 //如果删除了已经选中的
 var k = -1;
 for (var i = 0; i < selectedRows.length; ++i)
 {
  if (selectedRows[i].rowIndex == -1)
   k = i;
  else
   setRowCss(selectedRows[i], true);
 }
 if (k >= 0)
  selectedRows.remove(k); 
}
</script>

测试文件(test_htc_listView.aspx)如下:
<%@ Page language="c#" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>test_htc_listView</title>
  <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  <meta name="CODE_LANGUAGE" Content="C#">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  <script>
    function init()
    {
  lv1.addColumn
  (
   200,
   "Added",
   "color:green;BORDER-BOTTOM: green 1px dashed;BACKGROUND-COLOR: #EED881",
   "color:green;BORDER-BOTTOM: green 1px dashed;BACKGROUND-COLOR: #EFE6C1",
   "color:white;BORDER-BOTTOM: green 1px dashed;BACKGROUND-COLOR: black",
   "color:white;BORDER-BOTTOM: green 1px dashed;BACKGROUND-COLOR: black"
  );
    }
   
    function addData()
    {
  var data = new Array();
  data[1] = "kasdkf<br>kaskd";
  data[2] = "Liuk<br>as";
  data[3] = "com<br>asss";
  data[4] = "FF";
  data[5] = "gaGG";

上一页  [1] [2] [3]  下一页

[数据载入中...] [返回上一页] [打 印]