ASP.NET 用ImageMap动态添加HotSpot实现热点地图
2014-04-11 09:54
471 查看
先简要说下需求:
用个简单的实例来谈可能会清晰些。现在有一张全国地图,只标出了各个省;点击省出现省的地图,标明了市;点市出现市的地图,标明了区县。这样一层层的点。
高中的时候用图做个超链接,但是这个要用这样的方式做,那得做多少页面阿!的确有人提出用静态页面来做。
平台是:windows+vs2005+SQL Server
我最初就想到用ImageMap来做,但在网上查了很多资料也没找到方法。最后自己尝试出来了。
先在数据库建一个表:Map
字段有:ID,记录编号,自动增加 Int
ParentID:记录父记录的ID,Int
Name:记录名称
Path:图片路径
HotSpot:记录在附记录图片中的热区坐标
省级记录的ParentID,设置为0,
譬如:河北省的记录如下:ID为1,ParentID为0,Name为河北省,Path为河北省地图的相对路径,HotSpot为河北省在全国地图的热点坐标字符串。
那么石家庄市的记录可能就是:ID为5,ParentID为1,Name为石家庄市,Path为石家庄地图的相对路径,HotSpot为石家庄市在河北省地图的热点坐标字符串。
在VS2005中不能直接在图片上画热点,我没找到好的方法。我是直接在DW里画图片热点,然后把生成的坐标字符串复制出来。
页面加载后第一件事就是绑定热点,所以在Page_Load调用函数绑定热点。
然后ImageMap的HotSpotMode设置为Postback,响应click事件的方法里,从数据库里查询记录,绑定热点、PostbackValue和ImageMap的图片地址。
代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
setHotSpot(0);
}
}
protected void ImageMap1_Click(object sender, ImageMapEventArgs e)
{
int ID = int.Parse(e.PostBackValue);
DataTable dt=(DataTable)(ViewState["Table"]);
DataRow[] dr = dt.Select("ID=" + ID);
if (dr.Length > 0)
{
ImageMap1.ImageUrl = "../" + dr[0]["Path"];
}
else
{
return;
}
setHotSpot(ID);
}
private void setHotSpot(int ParentID)
{
ViewState["Table"] = null;//清空上一次保存的值
ImageMap1.HotSpots.Clear();//清除上一次添加的热点
string strSql="select * from lot_Map where ParentID="+ParentID;
DataTable dt=SqlHelper.ExecuteDataTable(strSql);
foreach (DataRow dr in dt.Rows)
{
PolygonHotSpot sp = new PolygonHotSpot();
sp.Coordinates = dr["HotSpot"].ToString();
sp.PostBackValue = dr["ID"].ToString();
sp.HotSpotMode = HotSpotMode.PostBack;
ImageMap1.HotSpots.Add(sp);
}
ViewState["Table"] = dt;
}
用个简单的实例来谈可能会清晰些。现在有一张全国地图,只标出了各个省;点击省出现省的地图,标明了市;点市出现市的地图,标明了区县。这样一层层的点。
高中的时候用图做个超链接,但是这个要用这样的方式做,那得做多少页面阿!的确有人提出用静态页面来做。
平台是:windows+vs2005+SQL Server
我最初就想到用ImageMap来做,但在网上查了很多资料也没找到方法。最后自己尝试出来了。
先在数据库建一个表:Map
字段有:ID,记录编号,自动增加 Int
ParentID:记录父记录的ID,Int
Name:记录名称
Path:图片路径
HotSpot:记录在附记录图片中的热区坐标
省级记录的ParentID,设置为0,
譬如:河北省的记录如下:ID为1,ParentID为0,Name为河北省,Path为河北省地图的相对路径,HotSpot为河北省在全国地图的热点坐标字符串。
那么石家庄市的记录可能就是:ID为5,ParentID为1,Name为石家庄市,Path为石家庄地图的相对路径,HotSpot为石家庄市在河北省地图的热点坐标字符串。
在VS2005中不能直接在图片上画热点,我没找到好的方法。我是直接在DW里画图片热点,然后把生成的坐标字符串复制出来。
页面加载后第一件事就是绑定热点,所以在Page_Load调用函数绑定热点。
然后ImageMap的HotSpotMode设置为Postback,响应click事件的方法里,从数据库里查询记录,绑定热点、PostbackValue和ImageMap的图片地址。
代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
setHotSpot(0);
}
}
protected void ImageMap1_Click(object sender, ImageMapEventArgs e)
{
int ID = int.Parse(e.PostBackValue);
DataTable dt=(DataTable)(ViewState["Table"]);
DataRow[] dr = dt.Select("ID=" + ID);
if (dr.Length > 0)
{
ImageMap1.ImageUrl = "../" + dr[0]["Path"];
}
else
{
return;
}
setHotSpot(ID);
}
private void setHotSpot(int ParentID)
{
ViewState["Table"] = null;//清空上一次保存的值
ImageMap1.HotSpots.Clear();//清除上一次添加的热点
string strSql="select * from lot_Map where ParentID="+ParentID;
DataTable dt=SqlHelper.ExecuteDataTable(strSql);
foreach (DataRow dr in dt.Rows)
{
PolygonHotSpot sp = new PolygonHotSpot();
sp.Coordinates = dr["HotSpot"].ToString();
sp.PostBackValue = dr["ID"].ToString();
sp.HotSpotMode = HotSpotMode.PostBack;
ImageMap1.HotSpots.Add(sp);
}
ViewState["Table"] = dt;
}
相关文章推荐
- asp.net后台动态添加JS文件和css文件的引用实现方法
- ASP.NET AJAX 实现登陆无刷新/动态添加服务器控件
- asp.net实现动态添加table行
- ASP.net Menu控件动态添加菜单项实现权限控制
- asp.net后台代码实现点击按钮动态添加table的一行
- asp.net通过实现IHttpHandler接口方法给图片添加水印图片(动态添加,不破坏原图片,但是耗资源)
- asp.net后台动态添加JS文件和css文件的引用实现方法
- 三步骤实现ASP.NET(C#)项目中添加谷歌(Google Map)地图
- Asp.net(asp,jsp)+JavaScript动态实现添加数据行
- asp.net 动态添加多个用户控件
- 向 ASP.NET 网页动态添加客户端脚本
- asp.net后台代码动态添加JS文件和css文件的引用
- ASP.NET中实现模版的动态加载
- 基于ASP.NET Web Application的插件动态编译反射实现,附DEMO
- Asp.net中DetailsView中添加日历控件 及DropDownList 并实现数据同步更新
- 向 ASP.NET 网页动态添加客户端脚本
- ASP.NET动态添加控件(感想)
- ASP.NET Google Maps Javascript API V3 实战基础篇一向地图添加控件
- Asp.Net动态添加控件,并获取其值
- ASP.NET中不定级动态菜单的实现