dojo运用之dataGrid

dojo应用之dataGrid

这次项目中,应用例子的总结,该篇文章主要总结datagrid的使用方法。

代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<style type="text/css">
			@import "../../../dojoroot/dojo/resources/dojo.css";
			@import "../../../dojoroot/dojox/grid/resources/Grid.css";
			@import "../../../dojoroot/dijit/themes/tundra/tundra.css";

	body {
			font-size: 0.9em;
			font-family: Geneva, Arial, Helvetica, sans-serif;
		}
		.heading {
			font-weight: bold;
			padding-bottom: 0.25em;
		}
		#grid, #grid2 {
			width: 80%;
			height: 30em;//??
			padding: 1px;
                       
		}
       th {text-align:center;}
	</style>
	<script type="text/javascript" src="../../../dojoroot/dojo/dojo.js" 
		djConfig="isDebug:false, parseOnLoad: true"></script>
    <script type="text/javascript" src="js/common.js" ></script>
    <script type="text/javascript">
	dojo.require("dijit.dijit");
	dojo.require("dojox.grid.DataGrid");
	dojo.require("dojo.data.ItemFileWriteStore");
	dojo.require("dojo.data.ItemFileReadStore");
	dojo.require("dojo.parser");
	
	var emptyData = { identifier: 'id', label: 'id', items: []}; 	
	var jsonStore = new dojo.data.ItemFileWriteStore({data: emptyData}); 
	</script>
     <script type="text/javascript">
	var equal = Url.encode("=");
	 /**
	 处理datagrid中的连接跳转问题,具体使用见下方
	 */
	function SensorLayer4Format(value, rowIndex){
		var grid =  dijit.byId("grid");  //得到grid的handle
		var prototype = grid.store.getValue(grid.getItem(rowIndex), "porttype");  //得到grid的store之中的具体的某个数值,‘prototype’是数值中item:[{..}]之中的一个值。
		var proto = grid.store.getValue(grid.getItem(rowIndex), "port_proto");//同上
		var url_port = Url.encode(grid.store.getValue(grid.getItem(rowIndex), "url_port"));//对得到的数据进行encode,代码在common.js中。
		/**
		  之下这些是返回相应的处理,value即使传进来的值,rowindex是当前处理的是第几项纪录,可以根据自己的需要进行修改
		*/
		var stcp = "<a href=\"/html/ips/log/ips_stat_sensor.html?url=ips_stat_sensor.php?tcp_port[0][0]=+&tcp_port[0][1]=layer4_sport&tcp_port[0][2]="+equal+"&tcp_port[0][3]="+url_port+"&tcp_port[0][4]=+&tcp_port[0][5]=+&tcp_port_cnt=1&layer4=TCP&sort_order=&num_result_rows=-1&current_view=-1\">" +value+"</a>";
		var sudp = "<a href=\"/html/ips/log/ips_stat_sensor.html?url=ips_stat_sensor.php?udp_port[0][0]=+&udp_port[0][1]=layer4_sport&udp_port[0][2]="+equal+"&udp_port[0][3]="+url_port+"&udp_port[0][4]=+&udp_port[0][5]=+&udp_port_cnt=1&layer4=UDP&sort_order=&num_result_rows=-1&current_view=-1\">" +value+ "</a>";
		
		var dtcp = "<a href=\"/html/ips/log/ips_stat_sensor.html?url=ips_stat_sensor.php?tcp_port[0][0]=+&tcp_port[0][1]=layer4_dport&tcp_port[0][2]="+equal+"&tcp_port[0][3]="+url_port+"&tcp_port[0][4]=+&tcp_port[0][5]=+&tcp_port_cnt=1&layer4=TCP&sort_order=&num_result_rows=-1&current_view=-1\">" +value+"</a>";
		var dudp = "<a href=\"/html/ips/log/ips_stat_sensor.html?url=ips_stat_sensor.php?udp_port[0][0]=+&udp_port[0][1]=layer4_dport&udp_port[0][2]="+equal+"&udp_port[0][3]="+url_port+"&udp_port[0][4]=+&udp_port[0][5]=+&udp_port_cnt=1&layer4=UDP&sort_order=&num_result_rows=-1&current_view=-1\">" +value+ "</a>";
		if(prototype ==1){
			if(proto == 17){
			  return sudp;
			}else{
			  return stcp;
			}
		}else{
		   if(proto == 17){
			  return dudp;
			}else{
			  return dtcp;
			}
		}
	}
	//该函数同上,不再赘述
	function OccurrencesLayer4Format(value, rowIndex){
		var grid =  dijit.byId("grid");
		var prototype = grid.store.getValue(grid.getItem(rowIndex), "porttype");
		var proto = grid.store.getValue(grid.getItem(rowIndex), "port_proto");
		var url_port = Url.encode(grid.store.getValue(grid.getItem(rowIndex), "url_port"));
		var stcp = "<a href=\"/html/ips/log/ips_qry_main.html?url=ips_qry_main.php?tcp_port[0][0]=+&tcp_port[0][1]=layer4_sport&tcp_port[0][2]="+equal+"&tcp_port[0][3]="+url_port+"&tcp_port[0][4]=+&tcp_port[0][5]=+&tcp_port_cnt=1&layer4=TCP&sort_order=&num_result_rows=-1&current_view=-1&new=1&submit=Query+DB&sort_order=sig_a\">" +value+"</a>";
		var sudp = "<a href=\"/html/ips/log/ips_qry_main.html?url=ips_qry_main.php?udp_port[0][0]=+&udp_port[0][1]=layer4_sport&udp_port[0][2]="+equal+"&udp_port[0][3]="+url_port+"&udp_port[0][4]=+&udp_port[0][5]=+&udp_port_cnt=1&layer4=UDP&sort_order=&num_result_rows=-1&current_view=-1&new=1&submit=Query+DB&sort_order=sig_a\">" +value+ "</a>";
		
		var dtcp = "<a href=\"/html/ips/log/ips_qry_main.html?url=ips_qry_main.php?tcp_port[0][0]=+&tcp_port[0][1]=layer4_dport&tcp_port[0][2]="+equal+"&tcp_port[0][3]="+url_port+"&tcp_port[0][4]=+&tcp_port[0][5]=+&tcp_port_cnt=1&layer4=TCP&sort_order=&num_result_rows=-1&current_view=-1&new=1&submit=Query+DB&sort_order=sig_a\">" +value+"</a>";
		var dudp = "<a href=\"/html/ips/log/ips_qry_main.html?url=ips_qry_main.php?udp_port[0][0]=+&udp_port[0][1]=layer4_dport&udp_port[0][2]="+equal+"&udp_port[0][3]="+url_port+"&udp_port[0][4]=+&udp_port[0][5]=+&udp_port_cnt=1&layer4=UDP&sort_order=&num_result_rows=-1&current_view=-1&new=1&submit=Query+DB&sort_order=sig_a\">" +value+ "</a>";
		
		if(prototype ==1){
			if(proto == 17){
			  return sudp;
			}else{
			  return stcp;
			}
		}else{
		   if(proto == 17){
			  return dudp;
			}else{
			  return dtcp;
			}
		}
	}
	
	function UniqueEventsLayer4Format(value, rowIndex){
		var grid =  dijit.byId("grid");
		var prototype = grid.store.getValue(grid.getItem(rowIndex), "porttype");
		var proto = grid.store.getValue(grid.getItem(rowIndex), "port_proto");
		var url_port = Url.encode(grid.store.getValue(grid.getItem(rowIndex), "url_port"));
		var stcp = "<a href=\"/html/ips/log/ips_stat_alerts.html?url=ips_stat_alerts.php?tcp_port[0][0]=+&tcp_port[0][1]=layer4_sport&tcp_port[0][2]="+equal+"&tcp_port[0][3]="+url_port+"&tcp_port[0][4]=+&tcp_port[0][5]=+&tcp_port_cnt=1&layer4=TCP&sort_order=&num_result_rows=-1&current_view=-1&sort_order=sig_a\">" +value+"</a>";
		
		var sudp = "<a href=\"/html/ips/log/ips_stat_alerts.html?url=ips_stat_alerts.php?udp_port[0][0]=+&udp_port[0][1]=layer4_sport&udp_port[0][2]="+equal+"&udp_port[0][3]="+url_port+"&udp_port[0][4]=+&udp_port[0][5]=+&udp_port_cnt=1&layer4=UDP&sort_order=&num_result_rows=-1&current_view=-1&sort_order=sig_a\">" +value+ "</a>";
		
		var dtcp = "<a href=\"/html/ips/log/ips_stat_alerts.html?url=ips_stat_alerts.php?tcp_port[0][0]=+&tcp_port[0][1]=layer4_dport&tcp_port[0][2]="+equal+"&tcp_port[0][3]="+url_port+"&tcp_port[0][4]=+&tcp_port[0][5]=+&tcp_port_cnt=1&layer4=TCP&sort_order=&num_result_rows=-1&current_view=-1&sort_order=sig_a\">" +value+"</a>";
		
		var dudp = "<a href=\"/html/ips/log/ips_stat_alerts.html?url=ips_stat_alerts.php?udp_port[0][0]=+&udp_port[0][1]=layer4_dport&udp_port[0][2]="+equal+"&udp_port[0][3]="+url_port+"&udp_port[0][4]=+&udp_port[0][5]=+&udp_port_cnt=1&layer4=UDP&sort_order=&num_result_rows=-1&current_view=-1&sort_order=sig_a\">" +value+ "</a>";
		if(prototype ==1){
			if(proto == 17){
			  return sudp;
			}else{
			  return stcp;
			}
		}else{
		   if(proto == 17){
			  return dudp;
			}else{
			  return dtcp;
			}
		}
	}
	
	function SrcIpLayer4Format(value, rowIndex){
		var grid =  dijit.byId("grid");
		var prototype = grid.store.getValue(grid.getItem(rowIndex), "porttype");
		var proto = grid.store.getValue(grid.getItem(rowIndex), "port_proto");
		var url_port = Url.encode(grid.store.getValue(grid.getItem(rowIndex), "url_port"));
		var stcp = "<a href=\"/html/ips/log/ips_stat_uaddr.html?url=ips_stat_uaddr.php?tcp_port[0][0]=+&tcp_port[0][1]=layer4_sport&tcp_port[0][2]="+equal+"&tcp_port[0][3]="+url_port+"&tcp_port[0][4]=+&tcp_port[0][5]=+&tcp_port_cnt=1&layer4=TCP&sort_order=&num_result_rows=-1&current_view=-1&addr_type=1&sort_order=addr_a\">" +value+"</a>";
		var sudp = "<a href=\"/html/ips/log/ips_stat_uaddr.html?url=ips_stat_uaddr.php?udp_port[0][0]=+&udp_port[0][1]=layer4_sport&udp_port[0][2]="+equal+"&udp_port[0][3]="+url_port+"&udp_port[0][4]=+&udp_port[0][5]=+&udp_port_cnt=1&layer4=UDP&sort_order=&num_result_rows=-1&current_view=-1&addr_type=1&sort_order=addr_a\">" +value+ "</a>";
		
		
		var dtcp = "<a href=\"/html/ips/log/ips_stat_uaddr.html?url=ips_stat_uaddr.php?tcp_port[0][0]=+&tcp_port[0][1]=layer4_dport&tcp_port[0][2]="+equal+"&tcp_port[0][3]="+url_port+"&tcp_port[0][4]=+&tcp_port[0][5]=+&tcp_port_cnt=1&layer4=TCP&sort_order=&num_result_rows=-1&current_view=-1&addr_type=1&sort_order=addr_a\">" +value+"</a>";
		var dudp = "<a href=\"/html/ips/log/ips_stat_uaddr.html?url=ips_stat_uaddr.php?udp_port[0][0]=+&udp_port[0][1]=layer4_dport&udp_port[0][2]="+equal+"&udp_port[0][3]="+url_port+"&udp_port[0][4]=+&udp_port[0][5]=+&udp_port_cnt=1&layer4=UDP&sort_order=&num_result_rows=-1&current_view=-1&addr_type=1&sort_order=addr_a\">" +value+ "</a>";
		
		if(prototype ==1){
			if(proto == 17){
			  return sudp;
			}else{
			  return stcp;
			}
		}else{
		   if(proto == 17){
			  return dudp;
			}else{
			  return dtcp;
			}
		}
	}
	
	function DstIpLayer4Format(value, rowIndex){
		var grid =  dijit.byId("grid");
		var prototype = grid.store.getValue(grid.getItem(rowIndex), "porttype");
		var proto = grid.store.getValue(grid.getItem(rowIndex), "port_proto");
		var url_port = Url.encode(grid.store.getValue(grid.getItem(rowIndex), "url_port"));
		var stcp = "<a href=\"/html/ips/log/ips_stat_uaddr.html?url=ips_stat_uaddr.php?tcp_port[0][0]=+&tcp_port[0][1]=layer4_sport&tcp_port[0][2]="+equal+"&tcp_port[0][3]="+url_port+"&tcp_port[0][4]=+&tcp_port[0][5]=+&tcp_port_cnt=1&layer4=TCP&sort_order=&num_result_rows=-1&current_view=-1&addr_type=2&sort_order=addr_a\">" +value+"</a>";
		var sudp = "<a href=\"/html/ips/log/ips_stat_uaddr.html?url=ips_stat_uaddr.php?udp_port[0][0]=+&udp_port[0][1]=layer4_sport&udp_port[0][2]="+equal+"&udp_port[0][3]="+url_port+"&udp_port[0][4]=+&udp_port[0][5]=+&udp_port_cnt=1&layer4=UDP&sort_order=&num_result_rows=-1&current_view=-1&addr_type=2&sort_order=addr_a\">" +value+ "</a>";
		
		var dtcp = "<a href=\"/html/ips/log/ips_stat_uaddr.html?url=ips_stat_uaddr.php?tcp_port[0][0]=+&tcp_port[0][1]=layer4_dport&tcp_port[0][2]="+equal+"&tcp_port[0][3]="+url_port+"&tcp_port[0][4]=+&tcp_port[0][5]=+&tcp_port_cnt=1&layer4=TCP&sort_order=&num_result_rows=-1&current_view=-1&addr_type=2&sort_order=addr_a\">" +value+"</a>";
		var dudp = "<a href=\"/html/ips/log/ips_stat_uaddr.html?url=ips_stat_uaddr.php?udp_port[0][0]=+&udp_port[0][1]=layer4_dport&udp_port[0][2]="+equal+"&udp_port[0][3]="+url_port+"&udp_port[0][4]=+&udp_port[0][5]=+&udp_port_cnt=1&layer4=UDP&sort_order=&num_result_rows=-1&current_view=-1&addr_type=2&sort_order=addr_a\">" +value+ "</a>";
		if(prototype ==1){
			if(proto == 17){
			  return sudp;
			}else{
			  return stcp;
			}
		}else{
		   if(proto == 17){
			  return dudp;
			}else{
			  return dtcp;
			}
		}
	}
		
	
	</script>
	<script type="text/javascript">
	//定义布局,或者可以直接在html代码中编写,写法这里不再提供
	var layoutFlickrData ={cells:{[
		[
		{ name: "Port", field: "port", width: '11%' },
		{ name: "Sensor", field: "sensornum", width: '15%' ,formatter:SensorLayer4Format},
	        { name: "Occurrences", field: "totalnum", width: '11%',formatter:OccurrencesLayer4Format},
                { name: "Unique Events", field: "uniquenum", width: '11%' ,formatter:UniqueEventsLayer4Format},
                { name: "Src.Addr.", field: "srcip", width: '11%' ,formatter:SrcIpLayer4Format},
                { name: "Dest.Addr.", field: "dstip", width: '11%' ,formatter:DstIpLayer4Format},
                { name: "First", field: "first", width: '15%' },
                { name: "Last", field: "last", width: '15%' }
		]
	]}};
	
        dojo.addOnLoad(function(){
			dojo.connect(window, "resize", grid, "resize");
			
		});
   var url = getURL();
		if(!url){
		   alert("Bad url!");
		}else{
			updateData(webpath+url);//update函数在common.js中提供
	    }
		
		/**
		数据类型:
		{'identifier':'id','idAttribute':'id','pagesize':48,'current_view':0,'allrows':261,'label':'id','items':[{'id':0,'porttype':1,'port_proto':'6','url_port':'80 ','port':'80 [sans] [tantalo] [sstats] ','sensornum':1,'totalnum':6,'uniquenum':1,'srcip':1,'dstip':1,'first':'2011-01-20 17:26:53.073+008','last':'2011-01-20 17:26:53.073+008'},{'id':1,'porttype':1,'port_proto':'6','url_port':'443 ','port':'443 / tcp [sans] [tantalo] [sstats] ','sensornum':1,'totalnum':25,'uniquenum':1,'srcip':1,'dstip':1,'first':'2011-01-20 17:43:17.706+008','last':'2011-01-20 17:43:18.978+008'}]}
		
		pagesize:每页展示多少数据
		allrows:该项查询共有多少数据
		current_view:当前是第几页,第一页为0
		*/
	</script>
</HEAD>
<BODY class="tundra">
<div style='text-align:center;margin:auto'><span id="pagelabel"></span></div>
<BR>

  <TABLE CELLSPACING=0 CELLPADDING=2 BORDER=0 WIDTH="100%" BGCOLOR="#000000">
    <TR>
      <TD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH="100%" BGCOLOR="#FFFFFF">
          <!-- 开始定义datagrid -->
          <TR>
            <TD>
            <!--  说明 escapeHTMLInData属性为false,则不会展示源代码,例如,返回的数据包含html代码,如果不设置或者这是为true,则会将源代码展示出来,如果设置成false,则和html页面在浏览器中展现的效果相同  -->
            <div dojoType="dojox.grid.DataGrid" class="tundra"
		jsid="grid" id="grid"  escapeHTMLInData="false" style="width:100%"
		store="jsonStore" query="{ id: '*' }" rowsPerPage="20" rowSelector="5px" structure="layoutFlickrData">
	   </div>
       <!--  这部分是提供分页使用的原始数据,返回根据返回的数据类型进行填值 -->
     <input type="hidden" name="num_result_rows" id="num_result_rows" value="" ></input>
        <input type="hidden" name="current_view" id="current_view" value="" ></input>
        <input type="hidden" name="pagesize" id="pagesize" value="" ></input>
            
            </TD>
          </TR>
          <tr>
<td>
<!-- 分页按钮以及分页下拉列表框   -->
<div style="padding: 0px; position: static; text-indent: 0px; padding: 0px;" class="dojoxGridHeader"  dojoAttachPoint="buttonBar">
        <div style="width: 100%; text-indent: 0px; padding: 0px;" class="dojoxGridCell">
            <button dojoType="dijit.form.Button" onClick="prevPage();"  style="float: left;">prev</button>
            <button dojoType="dijit.form.Button"  onClick="nextPage();" style="float: right">next</button>
            <span id="pagenum" style="text-align:center">
            </span>
        </div>
    </div>
</td>
</tr>
        </TABLE></TD>
    </TR>
  </TABLE>

<P> 
</P>
</BODY>
</HTML>

 

详情查看附件,附件包含源代码、效果图以及辅助代码,令有dojo datagrid分页源代码