十天学会ASP.Net——(7)

7.数据库查询——新闻管理系统的用户界面

首先是一个简单的现实界面,要求传递CateID作为URL中Get的参数,用来显示Cate表一条内容:

string id = Request.QueryString["ID"];
string conString2 = "Data Source= 192.168.43.1;Initial Catalog= dotnet;User ID= dotnet;Password=dotnet";
SqlConnection myConnection = new SqlConnection(conString2);
string cmdText = "select * from [VNews] where ID='" + id +"'";
SqlCommand myCommand = new SqlCommand(cmdText, myConnection);
myConnection.Open();
SqlDataReader dr = myCommand.ExecuteReader();
if (dr.Read())
{
    lblTitle.Text = dr["Title"].ToString();
    lblContent.Text = dr["Contents"].ToString();
}
myConnection.Close();

以上是刚刚提到过的SqlDataReader读取数据那么用GridView对象显示数据呢?

GridView1.DataSource = dr;

GridView1.DataBind();

这里就直接把获得的SqlDataReader作为了GridView对象的数据源,然后让GridView自己绑定数据源就搞定了。

实际上,System.Data中提供的可以作为数据源的对象很多。比如DataSet对象DataTable对象,DataAdapter对象作为DataSet对象的中间件,跟数据库打交道的DataSource对象。

总结一下:

DataSet就是数据库可以有多张表

DataTable数据库的表

DataReader游标,可以反复读数据(单向操作)

DataAdapter适配器(双向操作)

例1:

SqlDataAdapter da = new SqlDataAdapter(cmdText, myConnection);
DataSet ds = new DataSet();
da.Fill(ds);
GridView1.DataSource = ds.Tables[0].DefaultView;
GridView1.DataBind();

例2:

SqlDataReader dr = myCommand.ExecuteReader();
ds.Load(dr, LoadOption.Upsert, "cate");
GridView1.DataSource = ds;
GridView1.DataBind();

使用Repeater自己定制格式加载数据

<asp:Repeater ID="Repeater1" runat="server">

<ItemTemplate>

<li><span class="time"><%#Eval("PostDate") %></span>

<a href='show_news.aspx?id=<%#Eval("ID") %>' target="_blank">

<%#Eval("title") %>

</a></li>

</ItemTemplate>

</asp:Repeater>

这样,后台只要Bind一条记录前台就可以以自定义的格式显示该条记录,或者在页面上多设一些Repeator,或者运用动态添加的技术,然后可以充分发挥Repeater的定制性能,数据有多少就会出现多少行了。

现在再让我们来看看学校的新闻网:

clip_image002

我们现在来关心中间的豆腐块是怎么实现的:

其实就是刚刚用的Repeater对象,

新建一个Web用户自定义控件:

clip_image004 clip_image006

然后看看新闻网的实现呀:

是一个无序列表<ul>,中间的其中一块豆腐就是一个<li>再看下他放在哪里,这个是制作豆腐块的关键:

<div id="middlewrap-right">

<div id="bmcz_zonghexinwen">

<h1 class="title_zonghexinwen"><span class="more"><a href="/articles/75/">更多>></a></span></h1>

<ul>

<li class="first">

<span class="time">05-22</span>

<a href="/articles/75/18910/" target="_blank" title="文章标题:2012年“吾爱吾”心理健康宣传周开幕式暨专题培训讲座如期举行

作 者:谭娟晖

点 击 率:58" class="title-color0">

[<font color="blue">图</font>]2012年“吾爱吾”心理健康宣传周开幕式暨

</a></li>

一下还有几条内容,我们可以看到,这里并没有看到综合新闻的这几个字,它是一张Css控制的图片,其实让页面排布成这样方块形的也是CSS,所以我们要导入页面的Css文件:

clip_image008

clip_image010

顾构造WebUserControl.ascx页面代码如下

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<div id="middlewrap">
<div id="xueyuankuaixun"><h1 class="title_xueyuankuaixun"><span class="more"><a href="/articles/53/">更多>></a></span></h1>
<div id="bmcz_zonghexinwen">
<h1 class="title_zonghexinwen">
<span class="more"><a href="http://news.zafu.edu.cn/articles/75/">更多>></a></span>
</h1>
            <asp:Label ID="lblTitle" runat="server" Text=""></asp:Label>
            <ul>
                <asp:Repeater ID="Repeater1" runat="server">
                    <ItemTemplate>
                        <li><span class="time">
                            <%#Eval("PostDate") %></span> <a href="show_news.aspx?id=<%#Eval("ID") %>" target="_blank"
                                class="title-color0">
                                <%#Eval("Title") %></a></li>
                    </ItemTemplate>
                </asp:Repeater>
            </ul>
        </div>
    </div>

后台代码:

//字段
private string cateID;
//属性
public string CateID
{
    get { return cateID; }
    set { cateID = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
    string id = cateID;
    if (string.IsNullOrEmpty(id))
    {
        Response.Write("id是空");
        return;
    }
    string conString2 = "Data Source= localhost;Initial Catalog= dotnet;User ID= sa;Password=000000";
    SqlConnection myConnection = new SqlConnection(conString2);
    string cmdText = "select * from [News] where CateID='" + id + "'";
    SqlCommand myCommand = new SqlCommand(cmdText, myConnection);
    myConnection.Open();

    SqlDataReader dr = myCommand.ExecuteReader();
    Repeater1.DataSource = dr;
    Repeater1.DataBind();
    myConnection.Close();
    //Label1.Text = "类别[" + TextBox1.Text + "]添加成功";
}

然后建立豆腐块.aspx

<%@ Page Title="" Language="C#" MasterPageFile="MasterPage.master" AutoEventWireup="true" CodeFile="豆腐块.aspx.cs" Inherits="豆腐块" %>
<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<link href="http://news.zafu.edu.cn/static/front/default/css/base2.css" rel="stylesheet" type="text/css" media="screen" />
		<script type="text/javascript" src="http://news.zafu.edu.cn/static/admin/js/jquery.min.js"></script>
        
    <link href="http://news.zafu.edu.cn/static/front/default/css/home2.css" rel="stylesheet" type="text/css" media="screen" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<uc1:WebUserControl ID="uc1" runat="server" CateID="1" />
<uc1:WebUserControl ID="WebUserControl1" runat="server" CateID="2"/>
<uc1:WebUserControl ID="WebUserControl2" runat="server" CateID="3"/>
</asp:Content>

注意代码行中的CateID="2"就代表传给WebUserControl.ascx一个实例的CateID属性赋值为"2",这样,在调用代码的时候就会执行"select * from [News] where CateID='" + id + "'",将查询出数据库中目录号为2的所有记录都放在这个用户自定义控件当中。

我实现的效果:(数据库也贴出来大家看下)

clip_image012

clip_image014

原文地址:https://www.cnblogs.com/shenerguang/p/2514627.html