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();






