首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

4.5  其他相关查询

4.5.1  字段显示设置

在查询数据时,查询出来的结果也许会包含许多个字段。有的时候字段过多会影响数据的统计,也许用户只想查询几个字段的数据,这个时候就需要对显示的数据进行动态的设置,这样可以使软件更加地人性化,从而满足用户的需求。

1.方案分析

所谓的字段显示设置,就是根据用户对查询语句中查询的字段进行更改。使查询结果按照用户设置的字段显示,通常情况下在网站的后台管理系统中比较常见。方案的流程图如图4.48所示。

图4.48  字段显示设置

2.实施过程

在开发“物流信息发布平台后台管理系统”时,在专线信息管理板块中,提供了对物流线路的查询,当用户将所需的数据查询出来之后,也许有些信息并不想看到,这个时候可以通过显示字段设置进行更改,在字段的显示设置中,用户可以通过选择显示的字段,使查询结果根据设置进行显示。

*  实例位置:光盘\ mr\04\4.5\4.5.1\01

图4.49  根据设置的字段显示数据

程序实现具体步骤:

(1)新建一个网站命名为01,默认主页为Default.aspx。

(2)在站点根目录下新建一个文件夹,命名为Manage,然后向这个文件夹内添加一个新页命名为Way_list.aspx,然后在页面上添加一个GridView控件,用于显示所有数据以及查询后的数据显示。

(3)在页面中添加3个Button按钮和一个Panel控件,分别用于查询数据、显示设置字段的界面和设置显示字段。

(4)在页面中添加一个TextBox控件,用于输入查询的关键字。

(5)程序主要代码如下。

首先在Web.config文件中进行数据库连接配置,具体代码如下。

   <appSettings>

       <add key="strcon" value="server=localhost;database=db_04;user=sa;pwd=;"></add>

   </appSettings>

导入必要的命名空间,代码如下。

using System.Data.SqlClient;

然后当页面加载的时候,运行bind方法显示所有的数据,具体代码如下。

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            this.bind();

        }

    }

自定义的bind方法,通过SQL语句“select 编号,线路,发布类型,价格,公司名称,发布日期,发布用户 from tb_Way  order by 编号 desc”将数据库中所有的数据显示出来,具体代码如下。

    public void bind()

    {

        SqlConnection strcon = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["strcon"]);

        strcon.Open();

        SqlDataAdapter sda = new SqlDataAdapter("select 编号,线路,发布类型,价格,公司名称,发布日期,发布用户 from tb_Way order by 编号 desc", strcon);

        DataSet ds = new DataSet();

        sda.Fill(ds,"tb_Way");

        this.GridView1.DataSource=ds.Tables["tb_Way"];

        this.GridView1.DataKeyNames = new string[] {"编号"};

        this.GridView1.DataBind();

    }

当输入完关键字之后,单击“查询”按钮,程序会将所有包含关键字的数据检索出来,并且通过GridView控件显示出来,具体代码如下。

    protected void Button1_Click1(object sender, EventArgs e)

    {

        string strsql = "";

        if (TextBox1.Text.Trim() == "")

        {

            strsql = "select * from tb_Way";

        }

        else

        {

            strsql = "select * from tb_Way where 线路 like '%" + TextBox1.Text.Trim() + "%'";

        }

        SqlConnection conn = new SqlConnection("server=.;database=db_04;uid=sa;pwd=");

        SqlDataAdapter sda = new SqlDataAdapter(strsql, conn);

        DataSet ds = new DataSet();

        sda.Fill(ds, "news");

        GridView1.DataSource = ds.Tables["news"].DefaultView;

        GridView1.DataKeyNames = new string[] { "编号" };

        GridView1.DataBind();

        Button2.Enabled = true;

    }

当单击“设置显示字段”按钮时,程序会通过getname方法将指定表中的所有字段检索出来并绑定到CheckBoxList控件上显示出来,具体代码如下。

    protected void Button2_Click(object sender, EventArgs e)

    {

        Panel1.Visible = true;

        CheckBoxList1.DataSource = getname();

        CheckBoxList1.DataTextField = "name";

        CheckBoxList1.DataBind();

    }

getname方法通过"select name from syscolumns where id=object_id('tb_Way')"语句将指定的数据表的所有字段检索出来,具体代码如下。

 private SqlDataReader getname()//检索字段名

    {

        string a = "select name from syscolumns where id=object_id('tb_Way')";

        string cmdtxt1 = "Server=(local);DataBase=db_04;Uid=sa;Pwd=";

        SqlConnection Con = new SqlConnection(cmdtxt1);

        Con.Open();

        SqlCommand mycommand1 = new SqlCommand(a, Con);

        SqlDataReader dr2 = mycommand1.ExecuteReader();

        return dr2;

    }

当设置完要显示的字段后,单击“确定”按钮会根据选择的字段将查询后的数据重新显示程序首先判断CheckBoxList控件中的选择项,将选择项的值叠加起来用逗号隔开,得到的字符串就是要显示的所有字段名,具体代码如下。

    protected void Button3_Click1(object sender, EventArgs e)

    {

        if (CheckBoxList1.SelectedValue.Length == 0)

        {

            Page.RegisterStartupScript("", "<script>alert('请选择要显示的列名')</script>");

        }

        else

        {

            SqlConnection conn = new SqlConnection("server=.;database=db_04;uid=sa;pwd=");

            string str = "";

            for (int i = 0; i < CheckBoxList1.Items.Count; i++)

            {

                if (CheckBoxList1.Items[i].Selected)

                {

                    str += CheckBoxList1.Items[i].Text + ",";

                }

            }

            string y = str.Substring(0, str.Length - 1);

            string x = "select " + y + " " + "from tb_Way where 线路 like '%" + TextBox1.Text.Trim() + "%'";

            SqlDataAdapter sda = new SqlDataAdapter(x, conn);

            DataSet ds = new DataSet();

            sda.Fill(ds, "news");

            GridView1.DataSource = ds.Tables["news"].DefaultView;

            GridView1.DataBind();

        }

    }

3.补充说明

字段显示设置不只针对表进行查询,还可以对视图进行查询。视图是存在于数据库中的“虚拟数据表”,它的内容由查询所定义。对数据库用户来讲,视图似乎是一张真正的数据表,它具有一组命名的数据记录和字段。但是,与真实的数据表不同,视图不会像数据表那样将数据存储在数据库中。相反,视图中可见的视图字段和记录,是由定义该视图的查询直接生成的结果。

4.5.2  查询内容描红

查询内容描红是指将查询关键字以特殊的颜色、字号或字体进行标示。这样可以使用浏览者快速找到所需的关键字,方便浏览者从搜索结果中查找所需内容。查询内容描红适用于模糊查询。下面将介绍如何实现查询内容描红。

1.方案分析

论坛已经成为大家熟知的网络应用程序,在浏览在线论坛的时候,常常因为论坛内容过多而影响浏览,这个时候论坛中会提供站内搜索的功能,也就是在论坛内的所有帖子中搜索自己想浏览的帖子,而大多数情况下当输入关键字进行搜索的时候,如果有相关的帖子,就会将和关键字相关的帖子显示出来,并且在帖子中将搜索的关键字描红,流程图如图4.50所示。

图4.50  查询内容描红

2.实施过程

在开发明日在线论坛过程中,由于论坛中的栏目很多,并且大量的数据影响浏览,为了方便浏览者查找喜欢的帖子,加入了搜索的功能。程序运行首先打开首页,在首页里显示了论坛里所有的帖子信息,当要寻找自己感兴趣的帖子时,就可以单击“搜索”进行查询。

* 实例位置:光盘\mr\04\4.5\4.5.2\01

当用户单击“搜索”时,页面会转向搜索页面,如图4.51所示。

矩形标注: 单击“搜索”进入搜索页面

图4.51  明日在线论坛的首页

进入搜索页面SearchCard.aspx页之后,在查询条件的下拉列表中选择“帖子名称”,然后在关键字的文本框中输入“明”,单击“查找”按钮,就会将所有帖子名称与“明”相关的数据检索出来并显示在页面上,如图4.52所示。

图4.52  在搜索页面查询内容描红

程序实现具体步骤:

(1)新建一个网站命名为01,默认主页为Default.aspx。

(2)在该网站中新建一个名为FrontDesk的文件夹,在此文件夹中新建一个名为SearchCard.aspx的页,在页面中添加一个TextBox文本框,用于输入查询的关键字。添加一个DropDownList控件,用于选择关键字查询的范围。添加一个GridView控件,用于显示查询结果。

(3)添加二个Button控件,分别用于执行查询操作和返回操作。

(4)程序主要代码如下。

首先导入必要的命名空间,代码如下。

using System.Data.SqlClient;

新建两个类,分别命名为DataCon和DataOperate。DataCon类用于建立与数据库的连接,具体代码如下。

    public SqlConnection getCon()

    {

        string sqlCon = "Data Source=(local);Database=db_04;User id=sa;PWD=";

        SqlConnection myCon = new SqlConnection(sqlCon);

        return myCon;

    }

DataOperate类定义了几个方法用于执行对数据库的各种操作,具体代码如下。

  //首先创建一个DataCon对象dataCon

 DataCon dataCon = new DataCon();

    //定义了一个布尔型的方法用于执行对数据库的基本操作,例如:插入、更新和删除等,返回值为true或者false

    public bool DataCom(string sqlstr)

    {

        SqlConnection sqlconn = dataCon.getCon();

        sqlconn.Open();

        SqlCommand sqlcomm = new SqlCommand(sqlstr, sqlconn);

        try

        {

            sqlcomm.ExecuteNonQuery();

            return true;

        }

        catch

        {

            return false;

        }

        finally

        {

            sqlconn.Close();

        }

    }

    // gvBind方法用于根据参数sqlstr的查询条件对数据库进行检索,并且将结果绑定到GridView控件上

    public bool gvBind(GridView gv, string sqlstr)

    {

        SqlConnection sqlconn = dataCon.getCon();

        sqlconn.Open();

        SqlDataAdapter sqldataadapter = new SqlDataAdapter(sqlstr, sqlconn);

        DataSet mydataset = new DataSet();

        sqldataadapter.Fill(mydataset);

        gv.DataSource = mydataset;

        try

        {

            gv.DataBind();

            return true;

        }

        catch

        {

            return false;

        }

        finally

        {

            sqlconn.Close();

        }

    }

    //绑定DataList控件

    public bool dataBind(DataList dl,string sqlstr)

    {

        SqlConnection sqlconn = dataCon.getCon();

        sqlconn.Open();

        SqlDataAdapter myadapter = new SqlDataAdapter(sqlstr, sqlconn);

        DataSet mydataset = new DataSet();

        myadapter.Fill(mydataset);

        dl.DataSource = mydataset;

        try

        {

            dl.DataBind();

            return true;

        }

        catch

        {

            return false;

        }

        finally

        {

            sqlconn.Close();

        }

    }

当运行首页时,程序会调用自定义的dlBind方法将论坛中所有的帖子通过一个DataList控件显示,具体代码如下。

    DataCon myCon = new DataCon();

    DataOperate sqlBind = new DataOperate();

    SqlConnection sqlconn;

    protected void Page_Load(object sender, EventArgs e)

    {

        dlBind();

    }

    public void dlBind()

    {

        int curpage = Convert.ToInt32(this.labPage.Text);

        PagedDataSource ps = new PagedDataSource();

        sqlconn = myCon.getCon();

        sqlconn.Open();

        string sqlstr = "select a.*,b.* from tb_Card as a join tb_Module as b on a.ModuleID=b.ModuleID";

        SqlDataAdapter MyAdapter = new SqlDataAdapter(sqlstr, sqlconn);

        DataSet ds = new DataSet();

        MyAdapter.Fill(ds, "tb_Card");

        ps.DataSource = ds.Tables["tb_Card"].DefaultView;

        ps.AllowPaging = true; //是否可以分页

        ps.PageSize = 2; //显示的数量

        ps.CurrentPageIndex = curpage - 1; //取得当前页的页码

        this.lnkbtnUp.Enabled = true;

        this.lnkbtnNext.Enabled = true;

        this.lnkbtnBack.Enabled = true;

        this.lnkbtnOne.Enabled = true;

        if (curpage == 1)

        {

            this.lnkbtnOne.Enabled = false;//不显示第一页按钮

            this.lnkbtnUp.Enabled = false;//不显示上一页按钮

        }

        if (curpage == ps.PageCount)

        {

            this.lnkbtnNext.Enabled = false;//不显示下一页

            this.lnkbtnBack.Enabled = false;//不显示最后一页

        }

        this.labBackPage.Text = Convert.ToString(ps.PageCount);

        this.dlContent.DataSource = ps;

        this.dlContent.DataKeyField = "CardID";

        this.dlContent.DataBind();

    }

    protected void lnkbtnOne_Click(object sender, EventArgs e)

    {

        this.labPage.Text = "1";

        this.dlBind();

    }

    protected void lnkbtnUp_Click(object sender, EventArgs e)

    {

        this.labPage.Text = Convert.ToString(Convert.ToInt32(this.labPage.Text) - 1);

        this.dlBind();

    }

    protected void lnkbtnNext_Click(object sender, EventArgs e)

    {

        this.labPage.Text = Convert.ToString(Convert.ToInt32(this.labPage.Text) + 1);

        this.dlBind();

    }

    protected void lnkbtnBack_Click(object sender, EventArgs e)

    {

        this.labPage.Text = this.labBackPage.Text;

        this.dlBind();

    }

在搜索页面SearchCard.aspx中,添加一个GridView控件用于显示搜索结果。添加TextBox控件用于输入查询关键字。添加一个Button控件用于执行数据查询,具体代码如下。

    DataOperate sqlBind = new DataOperate();

    protected void btnSelect_Click(object sender, EventArgs e)

    {

        string sqlstr = "select * from tb_Card where " + ddlCondition.SelectedValue

            + "  like  '%" + txtKeyWord.Text + "%'";

        sqlBind.gvBind(gvCardInfo, sqlstr);

    }

自定义的RelaceString方法,用于实现对查询关键字的描红,刚开始接触这个技术问题,有很多朋友会感觉到无从下手,会觉得这是一个很难的问题,其实自己想一想有很多种方法可以实现,有使用控件实现的,有使用对表格的处理实现的,在本例中仅仅使用了处理字符串的Replace方法就可以轻松实现此功能,具体代码如下。

    public string RelaceString(string str)

    {

        string strx = str.Replace(txtKeyWord.Text,"<Font color=red>"+txtKeyWord.Text+"</Font>");

        return strx;

    }

当数据过多进行分页时,在GridView控件的PageIndexChanging事件中将会运行如下代码。

   protected void gvCardInfo_PageIndexChanging(object sender, GridViewPageEventArgs e)

    {

        gvCardInfo.PageIndex = e.NewPageIndex;

        string sqlstr = "select * from tb_Card where " + ddlCondition.SelectedValue

            + "  like  '%" + txtKeyWord.Text + "%'";

        sqlBind.gvBind(gvCardInfo, sqlstr);

    }

下面是“返回”按钮的Click事件中的代码,用于返回到首页。

    protected void btnBack_Click(object sender, EventArgs e)

    {

       Response.Redirect("../Default.aspx");

    }

3.补充说明

GridView控件是用来显示查询结果的,为了能使关键字描红,在本方案中对字段的绑定是通过模板列实现的。例如:将GridView控件中的“帖子名称”设为模板列,然后通过手动绑定的方式将查询出来的数据显示出来,如图4.53所示。

图4.53  将“帖子名称”设为模板列

然后在起HTML代码中通过<%#RelaceString(Eval("CardName").ToString())%>调用RelaceString方法使查询结果中的关键字描红,具体代码如下。

                    <asp:GridView ID="gvCardInfo" runat="server" AllowPaging="True" CellPadding="3"  Width="570px" BorderColor="#CCCCCC" BorderStyle="None" HorizontalAlign="Center" AutoGenerateColumns="False" Font-Size="9pt" OnPageIndexChanging="gvCardInfo_PageIndexChanging" PageSize="5" BackColor="White" BorderWidth="1px">

                        <FooterStyle BackColor="White" ForeColor="#000066" />

                        <RowStyle ForeColor="#000066" />

                        <Columns>

                            <asp:TemplateField HeaderText="帖子名称">

                                <ItemTemplate>

                                    <%#RelaceString(Eval("CardName").ToString())%>

                                </ItemTemplate>

                            </asp:TemplateField>

                            <asp:BoundField DataField="CardContent" HeaderText="帖子内容" >

                                <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />

                            </asp:BoundField>

                            <asp:BoundField DataField="CardDate" HeaderText="发帖日期" >

                                <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />

                            </asp:BoundField>

                            <asp:HyperLinkField DataNavigateUrlFields="CardID" DataNavigateUrlFormatString="Card.aspx?CardID={0}"

                                HeaderText="详细信息" Text="详细信息" >

                             <ControlStyle Font-Underline="False" />

                             <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />

                         </asp:HyperLinkField>

                        </Columns>

                         <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />

                        <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Center" />

                        <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />

                    </asp:GridView>

本方案实现的方法是利用字符串的Replace方法来实现的。

Replace方法可以替换掉一个字符串中的某些特定字符或者子串。

语法:

public string Replace (string oldValue,string newValue)

参数:

oldValue:要替换的字符。

newValue:要替换oldValue的所有匹配项的字符。

例如通过Replace方法将字符串“明日科技”替换成字符串“明日科技有限公司”,程序运行结果如图4.54和图4.55所示。

 

图4.54  程序运行结果                      图4.55  替换后的效果

通过Replace方法将“明日科技”替换成“明日科技有限公司”,具体代码如下。

    protected void Button1_Click(object sender, EventArgs e)

    {

        string str1 = Label1.Text.ToString();

        string str2=Label2.Text.ToString();

        //使用Replace方法替换字符串

string str = str1.Replace(str1, str2);

        Page.RegisterStartupScript("","<script>alert('原始字符被替换为:"+str+"')</script>");

    }

4.5.3  在结果中查询

在查询结果中搜索是指在进行一次查询后,再次输入查询条件进行二次查找或多次查找。这样可以逐渐缩小查找范围,便于浏览者快速找到所需内容。在查询结果中搜索适用于数据量比较大的网站中。

1.方案分析

当需要对查询结果开始进一步的查询时,就需要使用在结果中查询的方案,例如在开发明日网上购物商城后台管理系统时,在商品管理板块中,当查询出所有被推荐的商品之后,再查询这些被推荐的商品当中商品类型是“衣服”的所有商品信息。在结果中查询的流程图如图4.56所示。

图4.56  结果中查询流程图

2.实施过程

下面以明日网上购物商城后台管理系统为例,详细阐述有关在结果中查询的技术。在明日网上购物商城后台管理系统中,在商品管理板块中,利用在结果中查询技术实现了对商品信息的查询,如图4.57和图4.58所示。

* 实例位置:光盘\mr\04\4.5\4.5.3\01

矩形标注: 根据条件进行第一次查询矩形标注: 在查询结果中进行查询

图4.57  先根据查询条件进行第一次查询

当搜索出所有推荐商品之后,在下面的子查询中输入查询条件,从所有的推荐商品中查询出符合子查询条件的数据,并显示出来,如图4.58所示。

图4.58  在结果中查询

程序实现具体步骤:

(1)新建一个网站命名为01,默认主页为Default.aspx。

(2)在页面中添加二个TextBox文本框,分别用于输入查询关键字。

(3)在页面中添加二个Button按钮,分别用于查询数据。

(4)在页面中添加3个DropDownList控件,分别用于绑定字段和选择操作符。然后再添加一个GridView控件用于显示查询结果。

(5)程序主要代码如下。

在Web.config文件中进行数据库连接配置,具体代码如下。

  <appSettings>

    <add key="ConnectionString" value="Data Source=(local);Database=db_04;Uid=sa;PWD="/>

  </appSettings>

导入必要的命名空间,代码如下。

using System.Data.SqlClient;

创建一个名为SqlOperate.cs的类,用于执行对数据库的各种操作,具体代码如下。

    SqlConnection sqlconn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);

    public void DataCom(string sqlstr)

    {

        sqlconn.Open();

        SqlCommand sqlcom = new SqlCommand(sqlstr,sqlconn);

        sqlcom.ExecuteNonQuery();

        sqlconn.Close();

    }

    public void gvDataBind(GridView gv, string sqlstr)

    {

        sqlconn.Open();

        SqlDataAdapter myda = new SqlDataAdapter(sqlstr,sqlconn);

        DataSet myds = new DataSet();

        myda.Fill(myds);

        gv.DataSource = myds;

        gv.DataBind();

        sqlconn.Close();

    }

    public void dlDataBind(DataList dl, string sqlstr)

    {

        sqlconn.Open();

        SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlconn);

        DataSet myds = new DataSet();

        myda.Fill(myds);

        dl.DataSource = myds;

        dl.DataBind();

        sqlconn.Close();

    }

    public void ddlDataBind(DropDownList ddl, string sqlstr,string dvf)

    {

        sqlconn.Open();

        SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlconn);

        DataSet myds = new DataSet();

        myda.Fill(myds);

        ddl.DataSource = myds;

        ddl.DataValueField = dvf;

        ddl.DataBind();

        sqlconn.Close();

    }

创建一个SqlOperate对象,当页面加载时,将所有的数据信息绑定到GridView控件上显示出来,具体代码如下。

    SqlOperate sqloperate = new SqlOperate();

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            string sqlstr = "select * from vb_GoodsInfo";

            gvGoodsInfo.DataKeyNames = new string[] { "GoodsID" };

            sqloperate.gvDataBind(gvGoodsInfo, sqlstr);

        }

    }

当设置好查询条件,单击“查询”按钮,就会根据设置的条件将结果显示出来,然后将查询语句赋值给Session对象,以便后面的程序调用,具体代码如下。

    protected void btnSel_Click(object sender, EventArgs e)

    {

        string sqlstr = "";

        if (txtKey.Text == "")

        {

            sqlstr = "select * from vb_GoodsInfo";

            sqloperate.gvDataBind(gvGoodsInfo, sqlstr);

            Session["sql"] = sqlstr;

        }

        else

        {

            sqlstr = "select * from vb_GoodsInfo where " + ddlCondition.SelectedValue + " like '%" + txtKey.Text.Trim() + "%'";

            sqloperate.gvDataBind(gvGoodsInfo, sqlstr);

            Session["sql"] = sqlstr;

        }

    }

下面的代码是为每条记录后面的“删除”按钮添加询问信息的窗口,当单击“删除”按钮之后首先会弹出询问窗口,单击“确定”删除此条纪录,单击“取消”不执行任何操作,如图4.59所示。

图4.59  询问是否确定删除

在RowDataBound事件中添加如下代码,实现删除操作之前的提示框。

    protected void gvGoodsInfo_RowDataBound(object sender, GridViewRowEventArgs e)

    {

        if (e.Row.RowType == DataControlRowType.DataRow)

        {

            ((LinkButton)(e.Row.Cells[6].Controls[0])).Attributes.Add("onclick", "return confirm('确定要删除吗?')");

        }

    }

下面的代码的功能是对指定的数据进行删除。

    protected void gvGoodsInfo_RowDeleting(object sender, GridViewDeleteEventArgs e)

    {

        string sqlstr = "delete from tb_GoodsInfo where GoodsID='" + gvGoodsInfo.DataKeys[e.RowIndex].Value + "'";

        sqloperate.DataCom(sqlstr);

        Response.Redirect("GoodsManage.aspx");

    }

下面的代码是对GridView分页进行数据绑定。

  protected void gvGoodsInfo_PageIndexChanging(object sender, GridViewPageEventArgs e)

    {

        gvGoodsInfo.PageIndex = e.NewPageIndex;

        string sqlstr = "select * from vb_GoodsInfo where " + ddlCondition.SelectedValue + " like '%" + txtKey.Text.Trim() + "%'";

        sqloperate.gvDataBind(gvGoodsInfo, sqlstr);

    }

当设置好查询条件,单击“结果中查询”按钮时,程序会根据设置好的查询条件在结果中进行子查询,具体代码如下。

    protected void Button2_Click(object sender, EventArgs e)

    {

        string sqla = "";

        if (DropDownList2.SelectedItem.Text == "包含" || DropDownList2.SelectedItem.Text == "不包含")

        {

            sqla = "select * from (" + Session["sql"].ToString() + ") as newtable where newtable." + DropDownList1.SelectedValue.ToString() + " " + DropDownList2.SelectedValue.ToString() + " " + "'%" + txt1.Text + "%'";

        }

        else

        {

            sqla = "select * from (" + Session["sql"].ToString() + ") as newtable where newtable." + DropDownList1.SelectedValue.ToString() + " " + DropDownList2.SelectedValue.ToString() + "'" + txt1.Text + "'";

        }

        sqloperate.gvDataBind(gvGoodsInfo, sqla);

    }

3.补充说明

本节的实施过程中介绍的是应用子查询实现的在查询结果中搜索,还可以通过使用and运算符连接多个查询条件实现,下面给出程序的关键代码。

        SqlConnection sqlconn = new SqlConnection("server=(local);Database=db_04;Uid=sa;PWD=");

        sqlconn.Open();

        string sqlstr = "select * from vb_GoodsInfo where GoodsIsNew='是' and GoodsTypeName like '"+txtKey.Text+"'";

        SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlconn);

        DataSet myds = new DataSet();

        myda.Fill(myds);

        gv.DataSource = myds;

        gv.DataBind();

        sqlconn.Close();

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论