Smobiler上海石磨_.NET移动开发平台
标题:
coms管理系统——消息
[打印本页]
作者:
Lincy.Lin
时间:
2016-3-18 10:56
标题:
coms管理系统——消息
楼楼最近一直在项目中,没有及时更新帖子,在这里楼楼要跟大家说一声“对不起”,希望大家能谅解。
上次我们说到了coms管理系统的日报、周报、月报功能,这周楼楼的“消息”功能也完成了。因为领导要求进入主页第一个界面看到的是消息界面,所以我们需要将主页的布局进行调整。
关于主页布局调整楼楼考虑到四个问题:操作习惯、整体系统的协调性和风格的一致性以及界面布局的美观。根据这些问题我们将主页的布局分成三个子页,“消息”子页-“报销”子页-和“其他”子页。“消息”子页是当前用户的最新消息功能,“报销”子页是我们原“报销”功能,“其他”子页是楼楼前面帖子提到的“请假”、“签到”等功能;运行时是通过toolbar来进行子页面间的 导航。
[attach]508[/attach] [attach]505[/attach] [attach]507[/attach]
考虑到布局美观,这里楼楼对左侧栏背景颜色修改成了深湛蓝色,有没有觉得颜色搭配更美观了
。
[attach]506[/attach]
作者:
Lincy.Lin
时间:
2016-3-18 11:35
刚刚展示的是客户端的界面,服务端界面是怎么组成了。
“消息”子页服务端设计界面通过lable,Image,Imagebutton,Textbox,Gridview一级GPS控件来实现布局的。
[attach]509[/attach]
而"消息"界面的gridview中layout的界面布局也是由lable,Image控件构成布局,
gridview中layout界面布局设计好后,需要绑定到gridview的layout属性上
。
[attach]510[/attach] [attach]511[/attach]
作者:
Lincy.Lin
时间:
2016-3-18 12:03
“消息”子页设计完成了,又该怎么去获取“消息”的天气和当前地点等信息数据。我们需在界面的Load事件中调用GPS的GetGps方法,这里楼楼设置了GPS的超时时间,超时时间是可以不设置的,因为默认的超时时间是6000毫
///获取当前日期
lbldatetime.Text = System.DateTime.Today.ToString("MM月dd日 dddd", new System.Globalization.CultureInfo("zh-CN"));
///GPS超时时间
Gps1.TimeOut = 7000;
///调用GPS
Gps1.GetGps();
复制代码
获取GPS数据则需要通过GPS的GotLocation事件,这里我们需要获取天气所以要调用天气的插件
public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
复制代码
private void Gps1_GotLocation(object sender, GPSData e)
{
try {
if (string.IsNullOrEmpty(e.ErrorInfo)) {
if (e.Longitude.Equals(0) & e.Latitude.Equals(0)) {
this.LblGps.Text = "定位中...";
} else {
this.LblGps.Text = e.Location;
RemoteCertificateValidationCallback re = new RemoteCertificateValidationCallback(ValidateServerCertificate);
ServicePointManager.ServerCertificateValidationCallback = re;
string Longitude = e.Longitude.ToString;
//经度
string Latitude = e.Latitude.ToString;
//纬度
WebClient WebServer = new WebClient();
string str = "http://api.map.baidu.com/telematics/v3/weather?location=" + Longitude + "," + Latitude + "&output=xml&ak=h9unLzxMnPSE9hoDTvGUw9YB&mcode=100";
HttpWebRequest request = HttpWebRequest.Create(str);
HttpWebResponse response = request.GetResponse();
StreamReader sr2 = new StreamReader(response.GetResponseStream, Encoding.UTF8);
string text2 = sr2.ReadToEnd();
Xml.XmlDocument doc = new Xml.XmlDocument();
doc.LoadXml(text2);
Xml.XmlNode weather1 = doc.SelectSingleNode("CityWeatherResponse").Item("results").Item("weather_data").Item("weather");
string str1 = weather1.FirstChild().Value.ToString;
Xml.XmlNode temper1 = doc.SelectSingleNode("CityWeatherResponse").Item("results").Item("weather_data").Item("temperature");
string str2 = temper1.FirstChild().Value.ToString;
Xml.XmlNode wind1 = doc.SelectSingleNode("CityWeatherResponse").Item("results").Item("weather_data").Item("wind");
string str3 = wind1.FirstChild().Value.ToString;
Xml.XmlNode city1 = doc.SelectSingleNode("CityWeatherResponse").Item("results").Item("currentCity");
string str4 = city1.FirstChild().Value.ToString;
this.lblweather.Text = str2 + " " + str1 + " ";
}
}
} catch (Exception ex) {
this.LblGps.Text = "定位中...";
}
}
复制代码
作者:
Lincy.Lin
时间:
2016-3-18 14:03
在“消息”界面Load事件中加入Gridview数据绑定代码,
GetMessage()是楼楼自定义的一个方法,用来获取的消息数据。
DataTable table = GetMessage();//获取消息数据
if (table.Rows.Count > 0) {
GridView1.DataSource = table;
GridView1.DataBind();
} else {
this.GridView1.Rows.Clear();
}
复制代码
刚刚楼楼说过主页间子页面的导航是用toolbar按钮来实现的。在“消息”,“报销”,“其他”子页上都设置4个toolbar按钮。
[attach]512[/attach]
因为“消息”子页是主页的第一个界面,所以我们在“消息”界面,定义一个 toolbar子页面切换方法ProcessFormToolBarName,当点击toolbar上的“消息"按钮时,会在当前界面“消息”子页,当点击其他按钮会跳到相应的界面,在其他的子页面需要定义一个公共变量ToolBarName
传toolbar的name值。
/// <summary>
/// toolbar子页面切换方法
/// </summary>
/// <param name="toolbarname"></param>
/// <remarks></remarks>
private void ProcessMenuFormToolBarName(string toolbarname)
{
try {
switch (toolbarname) {
case RB.Name:
frmRBMune2 frmRBMain = new frmRBMune2();
this.Redirect(frmRBMain, () => { ProcessMenuFormToolBarName(frmRBMain.ToolBarName); });
break;
case Other.Name:
frmMune frmMune = new frmMune();
this.Redirect(frmMune, () => { ProcessMenuFormToolBarName(frmMune.ToolBarName); });
break;
case tExit.Name:
MessageBox.Show("是否确定退出系统?", MessageBoxButtons.YesNo, (Object s, MessageBoxHandlerArgs args) =>
{
if (args .Result == Smobiler.Core.ShowResult.Yes)
{
this.Close();
}
});
}
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
复制代码
然后再在“消息”子页界面调用ToolbarItemClick事件便可;
/// <summary>
/// toolbar
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <remarks></remarks>
private void frmMessage_ToolbarItemClick(object sender, ToolbarClickEventArgs e)
{
try {
ProcessMenuFormToolBarName(e.Name);
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
复制代码
在其他子页界面ToolbarItemClick判断不等于当前界面的toolbar按钮时,则将点击toolbar按钮的name值赋值给变量ToolBarName,并关闭当前界面。
if (e.Name != Other.Name) {
ToolBarName = e.Name;
this.Close();
}
复制代码
欢迎光临 Smobiler上海石磨_.NET移动开发平台 (https://www.smobiler.com/)
Powered by Discuz! X3.2