用户
 找回密码
 立即注册

40

主题

340

帖子

1456

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1456
发表于 2016-3-18 10:56:08
      楼楼最近一直在项目中,没有及时更新帖子,在这里楼楼要跟大家说一声“对不起”,希望大家能谅解。

      上次我们说到了coms管理系统的日报、周报、月报功能,这周楼楼的“消息”功能也完成了。因为领导要求进入主页第一个界面看到的是消息界面,所以我们需要将主页的布局进行调整。
      关于主页布局调整楼楼考虑到四个问题:操作习惯、整体系统的协调性和风格的一致性以及界面布局的美观。根据这些问题我们将主页的布局分成三个子页,“消息”子页-“报销”子页-和“其他”子页。“消息”子页是当前用户的最新消息功能,“报销”子页是我们原“报销”功能,“其他”子页是楼楼前面帖子提到的“请假”、“签到”等功能;运行时是通过toolbar来进行子页面间的 导航。
   

      考虑到布局美观,这里楼楼对左侧栏背景颜色修改成了深湛蓝色,有没有觉得颜色搭配更美观了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用道具 举报 回复
发表于 2016-3-18 11:35:21
      刚刚展示的是客户端的界面,服务端界面是怎么组成了。“消息”子页服务端设计界面通过lable,Image,Imagebutton,Textbox,Gridview一级GPS控件来实现布局的。

       而"消息"界面的gridview中layout的界面布局也是由lable,Image控件构成布局,gridview中layout界面布局设计好后,需要绑定到gridview的layout属性上
   





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用道具 举报 回复 支持 反对
发表于 2016-3-18 12:03:45
“消息”子页设计完成了,又该怎么去获取“消息”的天气和当前地点等信息数据。我们需在界面的Load事件中调用GPS的GetGps方法,这里楼楼设置了GPS的超时时间,超时时间是可以不设置的,因为默认的超时时间是6000毫
  1. ///获取当前日期
  2.         lbldatetime.Text = System.DateTime.Today.ToString("MM月dd日 dddd", new System.Globalization.CultureInfo("zh-CN"));
  3.         ///GPS超时时间
  4.         Gps1.TimeOut = 7000;
  5.         ///调用GPS
  6.         Gps1.GetGps();
复制代码

获取GPS数据则需要通过GPS的GotLocation事件,这里我们需要获取天气所以要调用天气的插件
  1. public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
  2. {
  3.         return true;
  4. }
复制代码


  1. private void Gps1_GotLocation(object sender, GPSData e)
  2. {
  3.         try {
  4.                 if (string.IsNullOrEmpty(e.ErrorInfo)) {
  5.                         if (e.Longitude.Equals(0) & e.Latitude.Equals(0)) {
  6.                                 this.LblGps.Text = "定位中...";
  7.                         } else {
  8.                                 this.LblGps.Text = e.Location;
  9.                                 RemoteCertificateValidationCallback re = new RemoteCertificateValidationCallback(ValidateServerCertificate);
  10.                                 ServicePointManager.ServerCertificateValidationCallback = re;

  11.                                 string Longitude = e.Longitude.ToString;
  12.                                 //经度
  13.                                 string Latitude = e.Latitude.ToString;
  14.                                 //纬度
  15.                                 WebClient WebServer = new WebClient();
  16.                                 string str = "http://api.map.baidu.com/telematics/v3/weather?location=" + Longitude + "," + Latitude + "&output=xml&ak=h9unLzxMnPSE9hoDTvGUw9YB&mcode=100";

  17.                                 HttpWebRequest request = HttpWebRequest.Create(str);
  18.                                 HttpWebResponse response = request.GetResponse();
  19.                                 StreamReader sr2 = new StreamReader(response.GetResponseStream, Encoding.UTF8);
  20.                                 string text2 = sr2.ReadToEnd();

  21.                                 Xml.XmlDocument doc = new Xml.XmlDocument();

  22.                                 doc.LoadXml(text2);
  23.                                 Xml.XmlNode weather1 = doc.SelectSingleNode("CityWeatherResponse").Item("results").Item("weather_data").Item("weather");
  24.                                 string str1 = weather1.FirstChild().Value.ToString;
  25.                                 Xml.XmlNode temper1 = doc.SelectSingleNode("CityWeatherResponse").Item("results").Item("weather_data").Item("temperature");
  26.                                 string str2 = temper1.FirstChild().Value.ToString;

  27.                                 Xml.XmlNode wind1 = doc.SelectSingleNode("CityWeatherResponse").Item("results").Item("weather_data").Item("wind");
  28.                                 string str3 = wind1.FirstChild().Value.ToString;

  29.                                 Xml.XmlNode city1 = doc.SelectSingleNode("CityWeatherResponse").Item("results").Item("currentCity");
  30.                                 string str4 = city1.FirstChild().Value.ToString;
  31.                                 this.lblweather.Text = str2 + " " + str1 + " ";
  32.                         }
  33.                 }
  34.         } catch (Exception ex) {
  35.                 this.LblGps.Text = "定位中...";
  36.         }
  37. }

复制代码




使用道具 举报 回复 支持 反对
发表于 2016-3-18 14:03:30
      在“消息”界面Load事件中加入Gridview数据绑定代码, GetMessage()是楼楼自定义的一个方法,用来获取的消息数据。
  1. DataTable table = GetMessage();//获取消息数据
  2. if (table.Rows.Count > 0) {
  3.         GridView1.DataSource = table;
  4.         GridView1.DataBind();
  5. } else {
  6.         this.GridView1.Rows.Clear();
  7. }
复制代码
      刚刚楼楼说过主页间子页面的导航是用toolbar按钮来实现的。在“消息”,“报销”,“其他”子页上都设置4个toolbar按钮。
因为“消息”子页是主页的第一个界面,所以我们在“消息”界面,定义一个 toolbar子页面切换方法ProcessFormToolBarName,当点击toolbar上的“消息"按钮时,会在当前界面“消息”子页,当点击其他按钮会跳到相应的界面,在其他的子页面需要定义一个公共变量ToolBarName传toolbar的name值。
  1. /// <summary>
  2. /// toolbar子页面切换方法
  3. /// </summary>
  4. /// <param name="toolbarname"></param>
  5. /// <remarks></remarks>
  6. private void ProcessMenuFormToolBarName(string toolbarname)
  7. {
  8.         try {
  9.                 switch (toolbarname) {
  10.                         case RB.Name:
  11.                                 frmRBMune2 frmRBMain = new frmRBMune2();
  12.                                 this.Redirect(frmRBMain, () => { ProcessMenuFormToolBarName(frmRBMain.ToolBarName); });
  13.                                 break;
  14.                         case Other.Name:
  15.                                 frmMune frmMune = new frmMune();
  16.                                 this.Redirect(frmMune, () => { ProcessMenuFormToolBarName(frmMune.ToolBarName); });
  17.                                 break;
  18.             case tExit.Name:
  19.                  MessageBox.Show("是否确定退出系统?", MessageBoxButtons.YesNo, (Object s, MessageBoxHandlerArgs args) =>
  20.                    {
  21.                        if (args .Result  == Smobiler.Core.ShowResult.Yes)
  22.                        {
  23.                            this.Close();
  24.                        }
  25.                   });

  26.                 }
  27.         } catch (Exception ex) {
  28.                 MessageBox.Show(ex.Message);
  29.         }
  30. }
复制代码
然后再在“消息”子页界面调用ToolbarItemClick事件便可;
  1. /// <summary>
  2. /// toolbar
  3. /// </summary>
  4. /// <param name="sender"></param>
  5. /// <param name="e"></param>
  6. /// <remarks></remarks>
  7. private void frmMessage_ToolbarItemClick(object sender, ToolbarClickEventArgs e)
  8. {
  9.         try {
  10.                 ProcessMenuFormToolBarName(e.Name);
  11.         } catch (Exception ex) {
  12.                 MessageBox.Show(ex.Message);
  13.         }
  14. }
复制代码
在其他子页界面ToolbarItemClick判断不等于当前界面的toolbar按钮时,则将点击toolbar按钮的name值赋值给变量ToolBarName,并关闭当前界面。
  1. if (e.Name != Other.Name) {
  2.         ToolBarName = e.Name;
  3.         this.Close();
  4. }
复制代码





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册