OWC绘图控件研究(3)

本文介绍了一个使用OWC组件绘制油耗统计分析图表的Web应用程序实例。该应用通过前后端结合的方式,根据用户选择的时间段和车辆信息,动态展示不同月份的油耗量趋势。

1.前台代码:

<%...@PageLanguage="C#"AutoEventWireup="true"CodeFile="testowc.aspx.cs"Inherits="web_testowc"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>无标题页</title>

<scripttype="text/javascript"language="javaScript"src="/_layouts/images/include/timein.js"></script>
<scriptlanguage="javascript">...
<!--
functionIni()
...{
varchart=document.getElementById("Chart");//newActiveXObject("OWC11.ChartSpace.11");
varc=chart.Constants;
if(chart==null)
...{
alert(
"您没有安装Office!");
}

chart.Clear();
varm_Chart=chart.Charts.Add(0);
//m_Chart.PlotArea.Interior.SetOneColorGradient(c.chGradientVariantStart,c.chGradientVariantStart,0.15,"Silver")

m_Chart.HasLegend
=true

m_Chart.HasTitle
=true
m_Chart.Title.Caption
="油耗量统计分析";
m_Chart.Axes(
0).HasTitle=true;
m_Chart.Axes(
0).Title.Caption="月份";
m_Chart.Axes(
1).HasTitle=true;
m_Chart.Axes(
1).Title.Caption="油耗量";

m_Chart.type
=0;
<%for(inti=0;i<arr1.Count;i++)
...{%>
varaCats<%=i%>=<%=arr1[i].ToString()%>;
varaVals<%=i%>=<%=arr2[i].ToString()%>;
varoSer<%=i%>=m_Chart.SeriesCollection.Add(<%=i%>);
oSer
<%=i%>.SetData(c.chDimSeriesNames,-1,<%=i.ToString()%>);
oSer
<%=i%>.SetData(c.chDimCategories,-1,aCats<%=i%>);
oSer
<%=i%>.SetData(c.chDimValues,-1,aVals<%=i%>);
<%
}
%>

chart.AllowPropertyToolbox
=true;
chart.DisplayToolbar
=true;

}

-->
</script>

</head>
<bodyonload="javascript:Ini()"style="text-align:center">
<formid="form1"runat="server">
<divstyle="text-align:center">
&nbsp;<tablestyle="width:874px">
<tr>
<tdcolspan="4">
</td>
</tr>
<tr>
<tdstyle="text-align:right">
<inputstyle="width:125px"id="txtSTime"readonlytype="text"runat="server"/><img
style="cursor:hand"onclick="fPopUpCalendarDlg(txtSTime,'/_layouts/images/include/timein.htm','yyyy-mm-dd');returnfalse"
alt
="弹出日历下拉菜单"src="/_layouts/images/include/datetime.gif"align="middle"/>
</td>
<td>
~
</td>
<tdstyle="text-align:left"colspan="2">
<inputstyle="width:125px"id="txtSTime1"readonlytype="text"runat="server"/><img
style="cursor:hand"onclick="fPopUpCalendarDlg(txtSTime1,'/_layouts/images/include/timein.htm','yyyy-mm-dd');returnfalse"
alt
="弹出日历下拉菜单"src="/_layouts/images/include/datetime.gif"align="middle"/>
<asp:DropDownListID="DropDownList1"runat="server">
</asp:DropDownList>
<asp:TextBoxID="TextBox1"runat="server"Width="97px"></asp:TextBox>
<asp:ButtonID="btnOk"runat="server"Text="确定"OnClick="btnOk_Click"/></td>
</tr>
<tr>
<tdcolspan="4"style="height:339px">
<objectid="Chart"name="Chart"codebase="http://www.smnpc.cn/bin/OWC11.DLL#version=11,0,6555,0"
classid
="clsid:0002E55D-0000-0000-C000-000000000046"progid="OWC11.ChartSpace.11"width="650px"height="450px">
</object>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>

2.后台代码:

usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Text;

usingSystem.Data.SqlClient;
usingSystem.Text;
usingYesidea.DAO;

publicpartialclassweb_testowc:System.Web.UI.Page
...{
DbHelperSQLdbhelper
=newDbHelperSQL(newBaseDAO());
protectedArrayListarr1=newArrayList();
protectedArrayListarr2=newArrayList();
protectedArrayListarr3=newArrayList();
publicstring[]driver=newstring[2];

protectedvoidPage_Load(objectsender,EventArgse)
...{
if(!IsPostBack)
...{
Yesidea.BO.CarInfocar
=newYesidea.BO.CarInfo();
DataSetds
=car.GetList("");
this.DropDownList1.DataSource=ds;
this.DropDownList1.DataTextField="Cnumber";
this.DropDownList1.DataValueField="Cnumber";
this.DropDownList1.DataBind();
}

}


protectedvoidbtnOk_Click(objectsender,EventArgse)
...{
driver
=newstring[]...{"王云","测试"};
for(intj=0;j<driver.Length;j++)
...{
GetData(
this.txtSTime.Value,this.txtSTime1.Value,this.DropDownList1.SelectedValue,driver[j].ToString());
}

}


publicintMonthStr(DateTimestime,DateTimeetime)
...{
inti=(etime.Year-stime.Year)*12+(etime.Month-stime.Month);
returni;
}


protectedDataSetCreateDriverOilDataSet(stringstime,stringetime,stringcnumber,stringcdriver)
...{
stringcmdtxt=String.Empty;
if(stime!=""&&etime!=""&&cnumber!=""&&cdriver!="")
...{
cmdtxt
="selectCnumber,Cdriver,sum(cfutel)asFutel,datename(year,Etime)as[Year],datename(month,Etime)as[Month]fromViewDriverUOil";
cmdtxt
+="whereEtime>'"+stime+"'andEtime<'"+etime+"'andCdriver=('"+cdriver+"')andCnumber=('"+cnumber+"')";
cmdtxt
+="groupbyCdriver,Cnumber,datename(month,Etime),datename(year,Etime)";
cmdtxt
+="orderby[Year]asc,[Month]asc";
//Response.Write(cmdtxt);
}

elseif(stime!=""&&etime!=""&&cnumber==""&&cdriver!="")
...{
cmdtxt
="selectCdriver,sum(cfutel)asFutel,datename(year,Etime)as[Year],datename(month,Etime)as[Month]fromViewDriverUOil";
<think>好的,用户想做一个微信小程序,主题是愚公移山,每个人每秒钟生成10个子。我需要先理解用户的需求。首先,愚公移山的故事是关于坚持不懈的精神,所以小程序可能希望用户通过不断“生子”来象征移山的努力。 用户提到每秒钟生成10个子,这可能意味着用户需要一种自动增长的机制,但每秒10个的速度非常快,需要考虑实际可行性。微信小程序的性能是否支持这么高的生成频率?可能需要调整速度,比如每秒1个或每分钟几个,以避免卡顿或数据过载。 接下来,用户可能需要功能设计方面的建议。比如用户如何开始生成子嗣,是否需要点击按钮,还是自动进行。界面设计可能需要显示当前子嗣数量、移山进度,以及可能的成就系统来激励用户持续参。 数据存储方面,用户的进度需要保存在本地或服务器。本地存储简单但容易丢失,云开发可以持久化数据但涉及成本。用户可能没有技术背景,需要推荐易用的解决方案,比如微信云开发。 动画效果方面,简单的粒子效果或图标移动可以增强体验,但复杂动画可能影响性能。需要平衡美观和流畅度。 合规性方面,微信小程序有严格的内容规范,确保主题不涉及敏感内容,比如“生子”是否符合规定,可能需要调整用词,比如改为“帮手”或“工人”。 用户可能希望加入社交元素,比如排行榜或分享功能,让朋友之间竞争,增加活跃度。但需要用户授权和隐私保护。 最后,用户可能需要技术实现步骤的指导,比如使用setInterval或WebSocket进行实时更新,前端框架的选择,以及后端如何处理高并发请求。如果用户是新手,可能需要更详细的教程或推荐开发工具。 总结,用户的核心需求是做一个以愚公移山为主题的微信小程序,核心机制是自动生成子嗣来移山。需要从功能设计、技术实现、合规性和用户体验等方面提供建议,同时考虑实际可行性和用户的技术水平,给出合适的解决方案。</think>好的!如果要设计一个以“愚公移山”为主题的微信小程序,核心机制是“每秒钟生成10个子”来模拟愚公家族不断壮大的过程,以下是分步实现的思路和建议: --- ### **一、核心机制设计** 1. **子嗣生成逻辑** - **自动增长**:每秒自动生成10个子嗣(需考虑实际性能,建议用虚拟数值而非实时渲染大量对象)。 - **手动触发**:添加按钮让用户点击加速生成(例如“召集村民帮忙”)。 2. **数值平衡** - **初始速度**:1秒/10个子(默认速率)。 - **加速规则**:通过道具或成就提升速度(如“神话加成”使速度翻倍)。 --- ### **二、技术实现方案** #### **前端(微信小程序框架)** 1. **计时器控制** ```javascript let timer = null; let childrenCount = 0; // 启动生成 function startGenerating() { timer = setInterval(() => { childrenCount += 10; // 每秒+10 this.setData({ count: childrenCount }); }, 1000); } // 停止生成 function stopGenerating() { clearInterval(timer); } ``` 2. **动画效果** - 使用CSS3动画或`<canvas>`绘制简单粒子效果(如小人物图标从底部向上飘动)。 #### **后端(可选)** - 如需保存用户进度,可使用微信云开发(云数据库): ```javascript const db = wx.cloud.database(); // 存储数据 db.collection('users').add({ data: { count: childrenCount, timestamp: new Date() } }); ``` --- ### **三、功能扩展建议** 1. **移山进度可视化** - 设计一个山脉图标,子嗣数量越多,山脉逐渐被“挖空”(通过进度条或图形变化体现)。 2. **成就系统** - 里程碑奖励(如“1000子嗣解锁新工具”)。 - 彩蛋事件(如“玉帝感动,瞬间生成10000子”)。 3. **社交互动** - 排行榜:对比好友的移山进度。 - 分享助力:邀请好友加速生成。 --- ### **四、注意事项** 1. **性能优化** - 避免高频更新UI导致卡顿,可改为每秒更新一次数值。 - 粒子动画需限制最大数量(如仅显示最后100个子嗣的动画)。 2. **合规性** - 避免使用“生子”等敏感词汇,可替换为“帮手”“工人”等。 3. **用户留存** - 加入离线收益(关闭小程序后按时间计算子嗣增长)。 --- ### **五、示例界面设计** 1. **主页布局** ``` [山脉图标(动态减少)] [当前子嗣数量:10000] [加速按钮] [分享按钮] [成就列表] ``` 2. **动效灵感** - 子嗣图标从屏幕底部向上滑动,象征“移山”。 --- 如果需要具体代码片段或更详细的技术实现步骤,可以告诉我您想深入的部分(如动画、云存储等)! 🌄
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值