【三层架构】搜索模块

来源:互联网 发布:澳门网络真人现场赌博 编辑:程序博客网 时间:2024/06/17 00:30

一、界面设计

做一个框架可以放搜出来的表


添加一个gridview可以用来显示数据

编辑列

写属性

可用字段选择boundfield-在boundfiled属性里面添加sortExpression和datafield,以及要表头要显示的名字headertext.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="365px">                            <Columns>                                <%--中文意思:列。放GridView控件里面的各列--%>                                <asp:BoundField DataField="kcLeixing" HeaderText="课程类型" SortExpression="kcLeixing"                                    ItemStyle-HorizontalAlign="Center">                                    <ItemStyle HorizontalAlign="Center"></ItemStyle>                                </asp:BoundField>                                <asp:BoundField DataField="kcBiaoti" HeaderText="课程标题" SortExpression="kcBiaoti"                                    ItemStyle-HorizontalAlign="Center">                                    <ItemStyle HorizontalAlign="Center"></ItemStyle>                                </asp:BoundField>                                <asp:BoundField DataField="kcJieshao" HeaderText="课程介绍" SortExpression="kcJieshao"                                    ItemStyle-HorizontalAlign="Center">                                    <ItemStyle HorizontalAlign="Center"></ItemStyle>                                </asp:BoundField>                                <asp:BoundField DataField="dianzanshu" HeaderText="点赞数" SortExpression="dianzanshu"                                    ItemStyle-HorizontalAlign="Center">                                    <ItemStyle HorizontalAlign="Center"></ItemStyle>                                </asp:BoundField>                                <asp:BoundField DataField="liulanshu" HeaderText="浏览数" SortExpression="liulanshu"                                    ItemStyle-HorizontalAlign="Center">                                    <ItemStyle HorizontalAlign="Center"></ItemStyle>                                </asp:BoundField>                                <asp:BoundField DataField="xxRenshu" HeaderText="学习人数" SortExpression="xxRenshu"                                    ItemStyle-HorizontalAlign="Center">                                    <ItemStyle HorizontalAlign="Center"></ItemStyle>                                </asp:BoundField>                                <asp:BoundField DataField="wcRenshu" HeaderText="完成人数" SortExpression="wcRenshu"                                    ItemStyle-HorizontalAlign="Center">                                    <ItemStyle HorizontalAlign="Center"></ItemStyle>                                </asp:BoundField>                                                          </Columns>                        </asp:GridView>

二、后台代码

 首先写sousuo.aspx.cs页面代码

要实现搜索功能,我们的逻辑要清晰。逻辑如下:在textbox里面输入关键词,点击搜索按钮,运行搜索按钮里面的代码,读取textbox里面的数据传递到搜索页面(sousuo.aspx)。

找一个东西保存传递过来的数据。

                TextBoxsearch2.Text = Session["guanjianci"].ToString();
                Session.Remove("guanjianci");

运行bindData()显示数据。

public void BindData()        {                       DataSet dsWeikecheng = new DataSet();//新建一个叫做ds的dataset实例,用于存放从数据库中读取的数据。                     StringBuilder strWhere = new StringBuilder();//新建一个strWhere 语句。就相当于string的高级版,操作多个字符串的时候使用,效率比string高                     if (TextBoxsearch2.Text.Trim() != "")//trim,一个string类特有的属性(方法),使得去掉文本框中两边输入的空格只剩下输入的字符或数字            {                strWhere.AppendFormat("kcBiaoti like '%{0}%' or kcLeixing like '%{0}%'", TextBoxsearch2.Text.Trim());//AppendFormat是使用类似String.Format方式追加具备一定格式的字符串。Append是直接添加字符。                         dsWeikecheng = bll.GetList(strWhere.ToString());//将strWhere这个实例字符串语句传递到已经被实例化的bll层的GetList方法里面。获得一个实例化过的真真正正的dataset                          GridView1.DataSource = dsWeikecheng;//gridView里面的数据源从哪里来呢,就从一个实例化过的真真正正的dataset里来,它的名字叫做ds.//数据源已经有了,但是还没有绑定啊,那还不赶紧绑定啊。                GridView1.DataBind();//将数据源绑定到在designer.cs里面声明过的aspxGridView 控件中。没有?赶紧在你要显示的页面里面建一个啊。                                 }            else            {                ltishi.Visible = true;//不要理他吧。            }        }
这个时候你会发现一些错误,不如bll不存在啊、getlist()不存在啊

于是你需要新建一个BLL实例, helios.BLL.sousuo bll = new helios.BLL.sousuo();在pageload()前面。

接下来去BLL层写BLL层里的代码

        public DataSet GetList(string strWhere)//将从UI传过来的StrWhere传递到GetList里面        {            return dal.GetList(strWhere);//将传过来的strWhere传递到dal层里面,        }        /// <summary>        /// 得到一个对象实体。需要在Dal层中,设置一个GetModel的方法。        /// </summary>        public helios.Model.sousuo GetModel(int kechengID)        {            return dal.GetModel(kechengID);        }
然后你又发现DAL还没建立起来呢,于是加上

       private readonly helios.DAL.sousuo dal = new helios.DAL.sousuo();

接下来就是去DAL层    

       /// <summary>/// 获得数据列表/// </summary>public DataSet GetList(string strWhere)//将从BLL层传过来strWhere放到GetList里面跑一圈。{StringBuilder strSql=new StringBuilder();strSql.Append("select kechengID,kcLeixing,kcBiaoti,kcJieshao,scShijian,kcFengmianURL,dianzanshu,beicaishu,liulanshu,xxRenshu,wcRenshu ");strSql.Append(" FROM Lcts ");if(strWhere.Trim()!=""){strSql.Append(" where "+strWhere);//得到一个完整的sql查询语句——strSQL语句,用于查询数据库}            return DbHelperSQL.Query(strSql.ToString());//执行查询语句,返回DataSet,也就是到此为止,}        /// <summary>        /// 得到一个对象实体。用于BLL得到一个实体对象        /// </summary>        public helios.Model.Controls.header GetModel(int kechengID)        {            StringBuilder strSql = new StringBuilder();//用来对很多字符串进行操作,减少内存占用量。            strSql.Append("select  top 1 kechengID,kcLeixing,kcBiaoti,kcJieshao,kcFengmianURL,dianzanshu,beicaishu,liulanshu,xxRenshu,wcRenshu from Lcts ");//添加字符串            strSql.Append(" where kechengID=@kechengID");//添加字符串            SqlParameter[] parameters = {new SqlParameter("@kechengID", SqlDbType.Int,4)};//sqlparameter表示Sqlcommond的参数,也可以是它到 DataSet 列的映射            parameters[0].Value = kechengID;            helios.Model.Controls.header model = new helios.Model.Controls.header();//实例化一个header模型            DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);            //它是从数据源中检索到的数据在内存中的缓存。新建一个这样的缓存实例。 DataSet 由一组 DataTable 对象组成             // DataTable 是 ADO.NET 库中的核心对象。 其他使用 DataTable 的对象包括 DataSet 和 DataView。             if (ds.Tables[0].Rows.Count > 0)            {                return DataRowToModel(ds.Tables[0].Rows[0]);            }            else            {                return null;            }        }        /// <summary>        /// 得到一个对象实体,这个实体对象用于GetModel实体对象里面。        /// </summary>        public helios.Model.Controls.header DataRowToModel(DataRow row)        {            helios.Model.Controls.header model = new helios.Model.Controls.header();            if (row != null)            {                if (row["kechengID"] != null && row["kechengID"].ToString() != "")                {                    model.kechengID = int.Parse(row["kechengID"].ToString());                }                if (row["kcLeixing"] != null)                {                    model.kcLeixing = row["kcLeixing"].ToString();                }                if (row["kcBiaoti"] != null)                {                    model.kcBiaoti = row["kcBiaoti"].ToString();                }                if (row["kcJieshao"] != null)                {                    model.kcJieshao = row["kcJieshao"].ToString();                }                //if(row["scShijian"]!=null && row["scShijian"].ToString()!="")                //{                //    model.scShijian=DateTime.Parse(row["scShijian"].ToString());                //}                if (row["kcFengmianURL"] != null)                {                    model.kcFengmianURL = row["kcFengmianURL"].ToString();                }                if (row["dianzanshu"] != null && row["dianzanshu"].ToString() != "")                {                    model.dianzanshu = int.Parse(row["dianzanshu"].ToString());                }                if (row["beicaishu"] != null && row["beicaishu"].ToString() != "")                {                    model.beicaishu = int.Parse(row["beicaishu"].ToString());                }                if (row["liulanshu"] != null && row["liulanshu"].ToString() != "")                {                    model.liulanshu = int.Parse(row["liulanshu"].ToString());                }                if (row["xxRenshu"] != null && row["xxRenshu"].ToString() != "")                {                    model.xxRenshu = int.Parse(row["xxRenshu"].ToString());                }                if (row["wcRenshu"] != null && row["wcRenshu"].ToString() != "")                {                    model.wcRenshu = int.Parse(row["wcRenshu"].ToString());                }            }            return model;        }
至此BLL层不会出现错误了

但是DAL层又出现了错误了,因为没有建立Model实例啊,于是我们只能

去Model层探险咯

        #region Model        private int _kechengid;        private string _kcleixing;        private string _kcbiaoti;        private string _kcjieshao;        private string _kcbiaoqian;        private DateTime _scshijian;        private string _kcfengmianurl = "~/images/avart.jpg";        private int? _dianzanshu = 0;        private int? _beicaishu = 0;        private int? _liulanshu = 0;        private int? _xxrenshu = 0;        private int? _wcrenshu = 0;        /// <summary>        ///         /// </summary>        public int kechengID        {            set { _kechengid = value; }            get { return _kechengid; }        }        /// <summary>        ///         /// </summary>        public string kcLeixing        {            set { _kcleixing = value; }            get { return _kcleixing; }        }        /// <summary>        ///         /// </summary>        public string kcBiaoti        {            set { _kcbiaoti = value; }            get { return _kcbiaoti; }        }        /// <summary>        ///         /// </summary>        public string kcJieshao        {            set { _kcjieshao = value; }            get { return _kcjieshao; }        }        /// <summary>        ///         /// </summary>        public string kcBiaoqian        {            set { _kcbiaoqian = value; }            get { return _kcbiaoqian; }        }        /// <summary>        ///         /// </summary>        public DateTime scShijian        {            set { _scshijian = value; }            get { return _scshijian; }        }        /// <summary>        ///         /// </summary>        public string kcFengmianURL        {            set { _kcfengmianurl = value; }            get { return _kcfengmianurl; }        }        /// <summary>        ///         /// </summary>        public int? dianzanshu        {            set { _dianzanshu = value; }            get { return _dianzanshu; }        }        /// <summary>        ///         /// </summary>        public int? beicaishu        {            set { _beicaishu = value; }            get { return _beicaishu; }        }        /// <summary>        ///         /// </summary>        public int? liulanshu        {            set { _liulanshu = value; }            get { return _liulanshu; }        }        /// <summary>        ///         /// </summary>        public int? xxRenshu        {            set { _xxrenshu = value; }            get { return _xxrenshu; }        }        /// <summary>        ///         /// </summary>        public int? wcRenshu        {            set { _wcrenshu = value; }            get { return _wcrenshu; }        }        #endregion Model
不就是定义很多属性嘛。谁不会啊?小李子摆摆手。


于是我们就可以得到可爱的搜索功能了。


本文针对组员使用,略过很多小细节,如有疑问请提出。初来乍到,文章有认识错误的地方,请指教!谢谢!

 

0 0