使用 ASP+ DataGrid 控件来创建主视图/详细资料视图 (2)

Step6Page.cs:

namespace Samples {
    ...

    public class Step6Page : Page {

        // 更新当前选定的作者并重新加载与选定内容对应的书名
        // 网格
        protected void LoadTitlesGrid() {
            UpdateSelection();
            titlesGrid.DataBind();
        }

        // 处理书名网格中的 CancelCommand 事件,以
        // 不施用更改就结束编辑
        protected void OnCancelCommandTitlesGrid(object sender,
                                      DataGridCommandEventArgs e) {
            titlesGrid.EditItemIndex = -1;
            LoadTitlesGrid();
        }

        // 处理书名网格中的 EditCommand 事件,以
        // 开始编辑某一行
        protected void OnEditCommandTitlesGrid(object sender,
                                       DataGridCommandEventArgs e) {
            titlesGrid.EditItemIndex = e.Item.ItemIndex;
            LoadTitlesGrid();
        }

        // 处理书名网格中的 UpdateCommand 事件,以施用
        // 所作的更改并结束编辑
        protected void OnUpdateCommandTitlesGrid(object sender,
                                      DataGridCommandEventArgs e) {
            TextBox priceText =
                    (TextBox)e.Item.FindControl("Column3Control");
            string newPrice = priceText.Text.Substring(1);
            
            DataSet ds = GetSessionData();
            DataTable titlesTable = ds.Tables["Title"];
            
            string titleID =
                   (string)titlesGrid.DataKeys[e.Item.ItemIndex];
            DataRow[] rows = titlesTable.Select("title_id = '" +
                                                titleID + "'");
            DataRow editRow = rows[0];

            editRow.BeginEdit();
            editRow["price"] = newPrice;
            editRow.EndEdit();
            editRow.AcceptChanges();
            titlesGrid.EditItemIndex = -1;
            LoadTitlesGrid();
        }
    }
}

EditCommand 事件是在单击 Edit 按钮时引发的。只需将 DataGrid 的 EditItemIndex 属性设定为包含被单击按钮的项目的索引的属性。要防止编辑某一个别行,不采取任何动作就返回。另外,要继续进行编辑,就必须重新加载数据源并调用 DataBind。这通过调用 LoadTitlesGrid 方法来完成。

您必须处理的第二个事件就是 CancelCommand 事件。这是单击 Cancel 按钮时引发的。实施十分类似于前一处理器。如想结束编辑,则只需将 EditItemIndex 属性重置为 ?,并重新加载数据源。如果需要维持行的编辑模式,则仅需不采取任何动作就从函数返回即可。

要处理的最后一个事件就是 UpdateCommand 事件,这是单击 Update 按钮时引发的。这里是实际工作发生的地方。从存在于项目中的控件抽取新的值,然后更新数据源。一旦将新的值使用完毕,就将 EditItemIndex 重置为 ?,以返回到只读模式,并连同其数据源一起重新加载控件。对于前两个事件,您可以不采取任何动作就从该函数返回,以保持该行的编辑模式状态。

这一步又再次举例说明控件中实施的显式数据绑定模型。在这一实施情形中,只在某行的状态从只读模式更改为编辑模式或相反时才需要数据源。注意, DataGrid 自身并不更新其数据源。实质上,数据绑定是单向的。采用本模型的目的在于让您拥有对数据源更新的控制。在大多数典型的应用程序中,更新需要预处理,并且是由业务对象或已存储的过程来调用的。另外,单向数据绑定并不要求每个时间都有实时的数据源。



第 7 步: 使用模板

DataGrid 控件通过使用 TemplateColumns,支持列内模板。可以完全自由地决定与这些列相关联的单元格的内容。这一步使用 TemplateColumn 来增强首先在前一步中实施的编辑支持。

图 8. 完成第 7 步后的页面

Titles DataGrid 来自:

Step7.aspx:

<asp:DataGrid id="titlesGrid" runat="server"
    ...>
  
  <property name="Columns">
    ...
    <asp:TemplateColumn HeaderText="Price">
      <template name="ItemTemplate">
        <asp:Label runat="server"
            Text='<%# DataBinder.Eval(Container.DataItem, "price",
                                      "{0:c}") %>'/>
      </template>

      <template name="EditItemTemplate">
        <asp:RequiredFieldValidator runat="server"
            ControlToValidate="priceText" Display="Dynamic">
          <img src="Error.gif" height="16" width="16" title="Required"
              align="absmiddle">
        </asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator runat="server"
            ControlToValidate="priceText" Display="Dynamic"
            ValidationExpression="/$[0-9]+(/.[0-9][0-9]?)?">
          <img src="Error.gif" height="16" width="16"
              title="Invalid currency value"
              align="absmiddle">
        </asp:RegularExpressionValidator>
        <asp:TextBox id="priceText" runat="server"
            Text='<%# DataBinder.Eval(Container.DataItem, "price",
                                      "{0:c}") %>'
            Width="45px" BorderStyle="Solid" BorderWidth="1px"
            BorderColor="Black">
        </asp:TextBox>
      </template>

      <property name="HeaderStyle">
        <asp:TableItemStyle Width="50px"/>
      </property>
      <property name="ItemStyle">
        <asp:TableItemStyle HorizontalAlign="Right"/>
      </property>
    </asp:TemplateColumn>
  </property>
  ...
</asp:DataGrid>

控件的声明展示将 TemplateColumn 添加到 Columns 集合,以替代价格字段的 BoundColumnTemplateColumns 是 DataGrid 的另一扩展机制。可以将其用于对 DataGrid 所创建的表格式布局内所表现的 UI 进行完全定制。 TemplateColumn 还提供模板属性,比如 ItemTemplateEditItemTemplate,从而您可以指定应当用于与列相关联的单元格内的控件。

在本例中, ItemTemplate 包含一个 Label 控件,其 Text 属性绑定到价格字段。这实质上在模仿 BoundColumn 的功能。

有意思的是, EditItemTemplate 模板用于处于编辑模式中的单元格。样例将一个 TextBox 放入已绑定到价格字段的模板中。这样就提供了与 BoundColumn 相同的功能。

模板包含各种各样的增强性能。首先,该模板允许对 TextBox 进行更大的控制,从而您可以创建在视觉上更有魅力的编辑 UI。其次,允许您放置验证控件,从而可以进行原地验证。在本样例中, RequiredFieldValidator 确保 TextBox 总是包含一个值,而 RegularExpressionValidator 确保文本包含一个有效的货币值。该功能的最令人兴奋的一个方面就是自动进行客户机端验证。 ASP+ 验证控件自动进行客户机端验证,并开启功能丰富的浏览器客户机上的错误指示器,从而无须往返过程和回落到为下级客户机进行服务器端验证。

Step7Page.cs:

namespace Samples {
    ...

    public class Step7Page : Page {

        // 处理书名网格中的 UpdateCommand 事件,以施用
        // 所作的更改并结束编辑 (当页面处于有效状态时)
        protected void OnUpdateCommandTitlesGrid(object sender,
                                      DataGridCommandEventArgs e) {
 if (IsValid) {
                TextBox priceText =
                        (TextBox)e.Item.FindControl("priceText");
                string newPrice = priceText.Text.Substring(1);
            
                DataSet ds = GetSessionData();
                DataTable titlesTable = ds.Tables["Title"];
            
                string titleID =
                       (string)titlesGrid.DataKeys[e.Item.ItemIndex];
                DataRow[] rows = titlesTable.Select("title_id = '" +
                                                    titleID + "'");
                DataRow editRow = rows[0];

                editRow.BeginEdit();
                editRow["price"] = newPrice;
                editRow.EndEdit();
                editRow.AcceptChanges();
                titlesGrid.EditItemIndex = -1;
                LoadTitlesGrid();
            }
        }
    }
}

对支持代码的唯一变更与继续对数据源进行更新之前检查页面的有效性有关。验证控件会自动更新页面的 IsValid 属性。

检查有效性是在 UpdateCommand 事件处理器中完成的。如第 6 步中所述,不采取任何动作就从事件处理器返回,会保持行的编辑模式。因此,当,且仅当页面处于有效状态时,才会执行所有的更新逻辑。

证实控件还会在无效时自动显示其错误消息,且无需编写任何补充代码。



第 8 步: 定制列

正如到目前您所看到的, DataGrid 控件支持标准的列集,诸如 BoundColumnButtonColumnTemplateColumn。该控件还允许您用自己的列类型对控件进行扩展。这些新的列提供了高度的灵活性。这一步实施一个名为 ImageColumn 的定制列,该列用于在单元格中,为带有图象 URL 数据绑定的每行显示一个图象。

图 9. 完成第 8 步后的页面

Titles DataGrid 以及 ImageColumn 的声明来自:

Step8.aspx:Step8.aspx:

<%@ Register TagPrefix="s" Namespace="Samples"%>
...
<asp:DataGrid id="titlesGrid" runat="server"
    ...>

  <property name="Columns">
    <s:ImageColumn ImageField="title_id"
       ImageFormatString="images/Title-{0}.gif"/>
  </property>
  ...
</asp:DataGrid>

本页面包含一个寄存器指令,用于映射 <s:ImageColumn> 标记,以表示 Samples.ImageColumn 类。

DataGrid 的声明展示添加到 DataGrid 的 Columns 集合的 ImageColumn。 还展示 ImageFieldImageFormatString 集,因而图象是以包含与特定行相关联的标题 ID 的 URL 为依据的。其工作原理与第 2 步中所使用的 HyperLinkColumn 十分类似。

ImageColumn.cs:

namespace Samples {
    ...

    public class ImageColumn : Column {

        private PropertyDescriptor imageFieldDesc;

        public ImageColumn() {
        }

        public string ImageField {
            get {
                object o = State["ImageField"];
                return (o != null) ? (string)o : String.Empty;
            }
            set {
                State["ImageField"] = value;
            }
        }

        public string ImageFormatString {
            get {
                object o = State["ImageFormatString"];
                return (o != null) ? (string)o : String.Empty;
            }
            set {
                State["ImageFormatString"] = value;
            }
        }

        // 在与该列相关联的单元格中创建
        // 控件
        public override void InitializeCell(TableCell cell,
                                            int columnIndex,
                                            ListItemType itemType) {
            base.InitializeCell(cell, columnIndex, itemType);

            if ((itemType == ListItemType.Item) ||
                (itemType == ListItemType.AlternatingItem) ||
                (itemType == ListItemType.SelectedItem) ||
                (itemType == ListItemType.EditItem)) {
                Image image = new Image();
                image.ID = Column.GetColumnControlID(columnIndex, -1);
                cell.Controls.Add(image);

                if (ImageField.Length != 0) {
                    image.AddOnDataBind(new
                          EventHandler(this.OnDataBindColumn));
                }
            }
        }

        // 将数据载入在 InitializeCell 中创建的控件
        private void OnDataBindColumn(object sender, EventArgs e) {
            Image boundImage = (Image)sender;
            DataGridItem item = (DataGridItem)boundImage.NamingContainer;
            object dataItem = item.DataItem;

            if (IsFirstDataBind()) {
                string imageField = ImageField;
                imageFieldDesc =
                  TypeDescriptor.GetProperties(dataItem)[imageField];

                if (imageFieldDesc == null) {
                    throw new Exception("Invalid property: '" +
                                        imageField + "'");
                }
                OnFirstDataBindHandled();
            }

            object data = imageFieldDesc.GetValue(dataItem);

            if (data != null) {
                string format = ImageFormatString;

                if (format.Length != 0) {
                    boundImage.ImageUrl = String.Format(format, data);
                }
                else {
                    boundImage.ImageUrl = data.ToString();
                }
            }
        }
    }
}

DataGrid 控件所使用的每一列均由抽象的 Column 类派生而来。 列类型实施各种各样的属性 (诸如 HeaderText) 以及所有列类型所公用的样式。

ImageColumn 类用于添加针对其具体功能的属性,诸如 ImageFieldImageFormatString 属性。实施这些属性,是通过将各值存入列的 State 中实现的。列的状态,在 DataGrid 控件的往返过程中自动得到保持。

每列所超控的最为重要的虚拟方法就是 InitializeCell 方法。 DataGrid 促使每列初始化与该列相关联的单元格。实施本方法时,列创建其所需要的控件,并将它们添加为单元格的子单元格。所创建的控件可能会随 itemType 参数的不同而不同,该参数指示包含单元格的列的 ItemType 属性。 Column 类自身包含用于产生标头和标尾的逻辑。 ImageColumn 在进行自我实施时,只是创建一个 Image 控件。它还向 Image 的 DataBind 属性添加一个事件处理器。

一旦将列创建完毕, DataGrid 就对其进行数据绑定。在该进程中,允许列借助与列相关联的数据对其在 InitializeCell 中创建的控件进行定制。 ImageColumn 检索其所绑定的字段的值,使用用户所指定的格式生成一个 URL,然后使用结果字符串来设定图象的 ImageUrl 属性。



结论

DataGrid 控件简化了多个常见 Web 应用情形,其中包括只读报表到交互式应用程序 UI。该控件优于传统的 ASP 编程。它将转换对象模型操作和数据绑定所需的逻辑封装进与浏览器无关的 HTML 表现功能。还将处理回传数据以及转换客户机事件的详细资料封状进服务器事件。

该控件设计用于无须作出太多开发努力就可以表现您的数据。随着应用要求的改变,以及您开始使用 DataGrid 的各种功能,您可以逐步添加其它功能。

现在 Microsoft® .NET SDK 和 Framework 中就已提供该控件。 SDK 还包含补充文档和多个样例,可用于快速启动;两者均实施本文中所提供的材料。


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
<p style="text-align:left;"> <span> </span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-family:"color:#E53333;font-size:14px;background-color:#FFFFFF;line-height:24px;"><span style="line-height:24px;">限时福利1:</span></span><span style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;">购课进答疑群专享柳峰(刘运强)老师答疑服务。</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <strong><span style="color:#337FE5;font-size:14px;">为什么说每一个程序员都应该学习MySQL?</span></strong> </p> <p class="ql-long-24357476"> <span style="font-size:14px;">根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。</span> </p> <p class="ql-long-24357476"> <img src="https://img-bss.csdn.net/202003301212574051.png" alt="" /> </p> <p class="ql-long-24357476"> <span style="font-size:14px;">使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。</span><br /> <br /> <span style="font-size:14px;">学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!</span> </p> <span></span> <p> <br /> </p> <p> <span> </span> </p> <h3 class="ql-long-26664262"> <p style="font-size:12pt;"> <strong class="ql-author-26664262 ql-size-14"><span style="font-size:14px;color:#337FE5;">【课程设计】</span></strong> </p> <p style="font-size:12pt;"> <span style="color:#494949;font-weight:normal;"><br /> </span> </p> <p style="font-size:12pt;"> <span style="color:#494949;font-weight:normal;font-size:14px;">在本课程中,刘运强老师会结合自己十多年来对MySQL的心得体会,通过课程给你分享一条高效的MySQL入门捷径,让学员少走弯路,彻底搞懂MySQL。</span> </p> <p style="font-size:12pt;"> <span style="color:#494949;font-weight:normal;"><br /> </span> </p> <p style="font-size:12pt;"> <span style="font-weight:normal;font-size:14px;">本课程包含3大模块:</span><span style="font-weight:normal;font-size:14px;"> </span> </p> </h3> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262"><span style="font-size:14px;">一、基础篇:</span></strong> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span class="ql-author-26664262" style="font-size:14px;">主要以最新的MySQL8.0安装为例帮助学员解决安装与配置MySQL的问题,并对MySQL8.0的新特性做一定介绍,为后续的课程展开做好环境部署。</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span class="ql-author-26664262" style="font-size:14px;"><br /> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262"><span style="font-size:14px;">二、SQL语言篇</span></strong><span class="ql-author-26664262" style="font-size:14px;">:</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span class="ql-author-26664262" style="font-size:14px;">本篇主要讲解SQL语言的四大部分数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,</span><span style="font-size:14px;">学会熟练对库表进行增删改查等必备技能。</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"><br /> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262"><span style="font-size:14px;">三、MySQL进阶篇</span></strong><span style="font-size:14px;">:</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">本篇可以帮助学员更加高效的管理线上的MySQL数据库;具备MySQL的日常运维能力,语句调优、备份恢复等思路。</span> </p> <span><span> <p style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"> </span><img src="https://img-bss.csdn.net/202004220208351273.png" alt="" /> </p> </span></span>
本套餐将包括两个重磅性的课程与一个赠送学习的课程,分别为SpringBoot实战视频教程与RabbitMQ实战教程跟SSM整合开发之poi导入导出Excel。目的是为了让各位小伙伴可以从零基础一步一个脚印学习微服务项目的开发,特别是SpringBoot项目的开发,之后会进入第二个课程:RabbitMQ的实战,即消息中间件在实际项目或者系统中各种业务模块的实战并解决一些常见的典型的问题!核心的知识点分别包括 一、SpringBoot实战历程课程 (1)SpringBoot实战应用场景的介绍与代码实战 (2)发送邮件服务、上传下载文件服务、Poi导入导出Excel (3)单模块与多模块项目构建、项目部署打包、日志、多环境配置、lombok、validator以及mybatis整合实战跟多数据源实战 (4)Redis缓存中间件的实战与缓存雪崩跟缓存穿透等问题的解决实战 (5)RabbitMQ消息中间件在业务模块异步解耦、通信、消息确认机制以及并发量配置等的实战 二、RabbitMQ实战教程课程 (1)RabbitMQ的官网权威技术手册拜读,认识并理解各大专有名词,如队列,交换机,路由,死信队列,消息确认机制等等 (2)RabbitMQ在业务服务模块之间的异步解耦通信实战,如异步记录日志与发送邮件等 (3)商城系统抢单高并发情况下RabbitMQ的限流作用与代码实战 (4)消息确认机制与并发量配置并用来实战商城用户下单 (5)死信队列深入讲解与DLX,DLK,TTL等概念的讲解并用来实战 “支付系统用户下单后支付超时而失效其下单记录”实战 详情,各位小伙伴可以查看两个课程的目录。相信学完该套餐相关课程后,你的实战能力将大大提升!涨薪将不再遥遥无期! 最后,赠送的SSM整合开发之POI导入导出Excel目的是为了让各位小伙伴也可以学习Spring+SpringMVC+Mybatis整合开发的项目,让大家一对比SpringBoot与SPring的项目开发流程以及复杂程度!!! 相信学完之后,你会对SpringBoot爱不释手!!
近年来,物联网的发展势不可挡,将很快成为下一个革命性的技术变革,改变人们的生活方式。而嵌入式linux相关技术则是物联网技术中的核心部分(感知层和传输层全部依赖嵌入式技术的支撑),想要在物联网技术中有所建树嵌入式linux是绕不开的一道坎,因此为广大相关专业大学生和相关行业工程师所关注。然后传统的线下培训班学习方式却有着诸多缺陷:费用高昂(4个月16800元左右)、时间和空间成本高昂(必须全日制集中式脱产学习、学习和生活成本高)、效果差(老师水平、责任心、教学管理水平参差不齐)等,让人望而却步、“嵌入式,想说爱你不容易”。 本课程是从零开始完整系统的学习嵌入式linux技术的完全教程,因此学习是分为几个阶段的,每个人应当根据自己的情况选择合适的学习起始点(譬如有基础则可不必从头开始)和学习重点安排(譬如有些人应该重点看C,而有些人要重点看裸机等)。 但是总的来说,大部分同学的基础和学习能力都相差不大,因此我下面给出的完整学习路径和建议适合99%的同学。这个学习路线也是朱老师课程录制和顺序,也是朱老师自己认为的合理的学习进阶路线,建议大家参考该路线学习,以大限度提升学习效率。 第0阶段:试学阶段 本阶段要学习的课程是《0.基础预科》中的3个课程。学习顺序为: 先学习《0.1.嵌入式软件工程师完全学习指南》。本课程是对物联网技术的介绍,和朱老师整个物联网相关课程的大规划(嵌入式linux核心课程属于朱老师整个物联网课程体系的一部分,其他部分还有诸如Android扩展、物联网传感器扩展等)。学完本课程可对物联网的概念和应用有更深的理解,尤其适合根本不理解何为物联网的小白学习。(现在很多大学都开设物联网专业,但是都大二大三了都还不知道何为物联网的人一大堆,甚至学校老师都说不清到底什么是物联网) 然后学习《0.2.朱老师带你零基础学Linux》,本课程是对linux系统的基本使用。因为之后的所有开发都是在linux系统(具体的说是ubuntu,更具体点是基础预科里用的是ubuntu10.04,后面其他课程里用的是ubuntu14.04)中进行的,因此要开始学习必须先会使用linux发行版系统,所以这个课必须先学。 后是《0.3.嵌入式linux C编程基础》,这个课程是非常非常基础的讲C语言的课程(其实还只讲了一半,是线下实体课堂的实录,因为当时课上到一半开班了所以就没继续讲了)。这个课程C语言讲的非常仔细,仔细到令人发指的程度。如果你C语言功底不行建议好好看这个课程,会有极大提升。当然如果C语言还可以,有一定功力(表现为看了这个课程后感觉太简单太容易了),那这个课程可以快进过去或者干脆跳过。 至此基础预科学习完毕,可以正式开启嵌入式linux学习之路了。 多说几句,整个《0.基础预科》部分的视频课程都是免费提供的。并不是说这部分课程没有含金量所以免费,相反这部分课程含金量很高(同学反馈的好评也多)。朱老师之所以将本部分定为免费课程,主要是希望大家能够零成本的开始学习,先通过这部分课程的学习检验自己的学习结果,搞清楚以下问题: 我到底能不能学会? 这个课程到底适合不适合我,这个老师的风格我到底喜欢不喜欢? 这个技术方向到底能不能吸引我?我是不是真的决定去学嵌入式了? 这老师行不行?值不值得花钱买他的课程? 把这个阶段定位为试学阶段,也是基于这点。试学,一方面试的是你自己,另一方面试的是我。试学阶段40小时左右的课程(其实本来可以短一些的)大家至少需要一周以上才能学完,这么久的时间就是希望大家能够想清楚,也能够看清楚自己的内心兴趣,同时也能充分检验朱老师的课程质量。 第1阶段:初级嵌入式软件工程师阶段 本阶段的学习内容包括《1.ARM裸机全集》和《4.C语言专题》这两个课程。学习顺序是以ARM裸机为主线,其中穿插C语言专题进行学习。 本阶段2个大课程加起来156小时,主体内容是嵌入式linux软件开发方向的各种零碎知识点和能力点,几乎可以认为是整个课程中重要的一个阶段(有些人说驱动重要?这两个阶段如果过不了驱动跟你半毛钱关系都没有)。 本阶段对大家重要还有个更主要原因就是:本课程中讲的东西都是各种嵌入式软件开发岗位技术面试笔试中常遇到的。所以如果是希望通过学习搞定面试找到工作,那本阶段的课程就要作为重点学(尤其是C语言专题)。 第2阶段:提升阶段 本阶段的学习内容包括《2.uboot和linux内核移植》和《3.linux应用编程和网络编程》。其中uboot和系统移植承接ARM裸机阶段内容,继续讲解uboot。这个课程也很精华,分为20个小课程一共92小时,学习本课程并且把课程中的练习都做下来后,整个人的程序编写和调试功能会极大提升,用已经学完的同学的话讲是“感觉整个人脱胎换骨了”。Linux应用编程和网络编程这个课程根据APUE这本书简化而来,面向实际用到的知识点和重点,学起来难易适中,相对轻松点。不过却是后面学习驱动的,想要写驱动必须得先会写应用,这个道理大家一定要遵从。 本阶段的2个课程之间没有先后顺序,大家可以根据自己的需要来安排。我讲课时是按照先uboot和系统移植,后linux应用编程和网络编程的。(主要是为了承接前后阶段) 第3阶段:驱动学习阶段 本阶段内容为《5.linux驱动开发》,本部分是整个课程里大家期待的部分,很多人是一上来就想学习驱动开发的。但是必须认识到,驱动是linux技术中集大成者,前面所有课程中学到的内容在驱动中都会用到,驱动编程和调试是让人抓掉头发都无从下手的麻烦事,所以建议大家学好前面的课程再来看本部分,否则你将什么都得不到。(就好像笑话里说的那种,前面4碗饭不吃,直接吃第5碗也是不可能饱的) 第4阶段:项目阶段 本阶段为大家安排了一个练习项目,该项目综合用到了前面课程中讲到的知识和能力,包括驱动和应用,编程能力、调试能力等。为了方便本项目并未用到额外的配件,课程配套的X210开发板即可直接完成项目。本项目只是个开胃小菜,用来给大家检验自己的学习成果的而已。 真正有用而复杂的项目,朱老师将在另一个课程体系(暂定名为:朱有鹏老师物联网项目库)中给大家一一道来。这些项目会从2016.8左右开始一直持续(直到朱老师退休······),朱老师的目标是将常见的各种物联网传感器、外设硬件模块、前端技术应用都囊括进来,使用我们嵌入式linux核心课程中学到的编程能力,结合这些软硬件模块来完成一个又一个大项目小项目。将来大家可以根据自己的兴趣爱好和工作需要,在其中选择合适的项目进行学习,并且即刻在实际中遇到这些项目(也是是为了毕业设计、也许是公司下一个产品···)
<p> <span> </span> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span style="color:#E53333;">92讲视频课+16大项目实战+课件源</span><span style="color:#E53333;">码+讲师社群闭门分享会</span> </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-14 ql-author-32569780"><span style="color:#337FE5;font-size:14px;">为什么学习数据分析?</span></strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-14 ql-author-32569780"><span style="color:#337FE5;"><br /> </span></strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;">       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <br /> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;">       从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 </p> <p style="font-size:11pt;color:#494949;">  <span style="font-size:11pt;"> </span> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span style="color:#337FE5;"><strong>本课程共包含五大模块:</strong></span> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-14 ql-author-32569780"><span style="color:#337FE5;"><br /> </span></strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-12 ql-author-32569780">一、先导篇:</strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span class="ql-author-32569780">通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。</span> </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-12 ql-author-32569780">二、基础篇:</strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-12 ql-author-32569780">三、数据采集篇:</strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span class="ql-author-32569780">通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。</span> </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-12 ql-author-32569780">四、分析工具篇:</strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span class="ql-author-32569780">讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。</span> </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-12 ql-author-32569780">五、算法篇:</strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span class="ql-author-32569780">算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。</span> </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006110958102443.jpg" /> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

蝈蝈俊

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值