数据的查询与展示
一、GrilView是一个数据源绑定控件,对于任何一个这样的控件来说在绑定控件的时候有两点我们需要注意:
1>
2>
this.GridView2.DataBind();
二、首先我们来看看在asp.net中如何去绑定GrilView
2>通过编码的方式在后台代码中绑定,为了方便,先按第一种方式绑定好,然后把在页面中将绑定的代码删掉即可
三、GrilView中的7中数据绑定列类型
1>BoundFiled:用于显示普通文本,也是默认的绑定方式,一般自动生成的类型就是该类型,需要注意的是该类型可以设置字段的格式,通过DataFormatString属性:比如日期:{0:yy-mm-dd},货币:{0:c},数字:{0:d}等,但是需要设置hemlCode为false才可以,否则设置无效,或者采用另外一种方式<%#
2> TemplateFileld:以模板的形式自定义数据绑定列的内容,它比较灵活,添加的方式有两种:直接添加TemplateFileld或着将现有的字段转换为模板字段,很好实用,但是有几点需要注意:
Eval还有一个重载的方法'<%# eval_r("Category.Name","{0:dd/MM/yyyy}")%>
括号里面的是类的属性名
3> ButtonFiled: 是个按钮,可以转化成三种普通按钮方式:button,LinkButton,imgButton
这种方法是做常用,最保障的一个方法,推荐使用这种方法!
3>
A 视图配置删除修改等方法(注意方法参数是一个实体),然后将grilView的dataKeyName设为他们的参数,一般都是ID,然后就可以进行操作,如果没用找到相关方法,可以在重新绑定一次
B 假如没有通过视图绑定相关的方法,而且绑定的时候是通过编码绑定的,而不是视图绑定的时候,这个时候我们先将grilView的dataKeyName的值设置好,然后再GrilView的Rowdeleting或RowUpdating方法中获得主键,调用业务逻辑层的相关方法,即可!
下面看一个例子:
页面代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
Width="681px"
DataKeyNames="customid" EmptyDataText="没有可显示的数据记录。"
HeaderStyle-Height="25" RowStyle-Height="20"
HeaderStyle-BorderColor="Black" AllowPaging="True" PagerStyle-BorderColor="White"
onpageindexchanging="GridView1_PageIndexChanging"
onrowediting="GridView1_RowEditing"
onrowcancelingedit="GridView1_RowCancelingEdit"
onrowupdating="GridView1_RowUpdating" onrowdeleting="GridView1_RowDeleting"
>
<PagerSettings FirstPageText="首页" LastPageText="末页"
Mode="NextPreviousFirstLast" NextPageText="下一页" PreviousPageText="上一页" />
<RowStyle Height="20px"></RowStyle>
<Columns>
<asp:BoundField DataField="customName" HeaderText="姓名" ReadOnly="True"
SortExpression="customName" ItemStyle-BorderColor="Black"
HeaderStyle-BorderColor="Black">
<HeaderStyle BorderColor="Black"></HeaderStyle>
<ItemStyle BorderColor="Black"></ItemStyle>
</asp:BoundField>
<asp:TemplateField HeaderText="所属单位" SortExpression="customUnit">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("customUnit") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("customUnit") %>'></asp:TextBox>
</EditItemTemplate>
<HeaderStyle BorderColor="Black" />
<ItemStyle BorderColor="Black" />
</asp:TemplateField>
<asp:TemplateField HeaderText="身份证" SortExpression="customCard">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("customCard") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("customCard") %>'></asp:TextBox>
</EditItemTemplate>
<HeaderStyle BorderColor="Black" />
<ItemStyle BorderColor="Black" />
</asp:TemplateField>
<asp:BoundField DataField="selectNumDate" HeaderText="时间" DataFormatString="{0:yyyy.MM.dd}"
SortExpression="selectNumDate" ItemStyle-BorderColor="Black"
HeaderStyle-BorderColor="Black">
<HeaderStyle BorderColor="Black"></HeaderStyle>
<ItemStyle BorderColor="Black"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="selectNum" HeaderText="号码" ReadOnly="True"
SortExpression="customName" ItemStyle-BorderColor="Black"
HeaderStyle-BorderColor="Black">
<HeaderStyle BorderColor="Black"></HeaderStyle>
<ItemStyle BorderColor="Black"></ItemStyle>
</asp:BoundField>
<asp:CommandField HeaderText="操作" ShowEditButton="True" />
<asp:CommandField />
<asp:CommandField HeaderText="删除" ShowDeleteButton="True" />
</Columns>
<PagerStyle BorderColor="White"></PagerStyle>
<HeaderStyle BorderColor="Black" CssClass="STYLE7" Height="25px"></HeaderStyle>
</asp:GridView>
</div>
</form>
</body>
</html>
后台cs代码:
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Text;
using System.Data.OleDb;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
protected void bind()
{
string sqlstr = "select * from tb_Custom ";
DataTable customList = DBHelp.GetTable(sqlstr);
GridView1.DataSource = customList;
GridView1.DataBind();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
bind();
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
bind();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string id = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
//根据号码修改信息
string customUnit = ((TextBox)(this.GridView1.Rows[e.RowIndex].FindControl("TextBox1"))).Text;
string cNum = ((TextBox)(this.GridView1.Rows[e.RowIndex].FindControl("TextBox2"))).Text;
StringBuilder strSql = new StringBuilder();
strSql.Append("update tb_Custom set customUnit=@customUnit,customCard=@customCard");
strSql.Append(" where customid=@customid");
OleDbParameter[] paras = new OleDbParameter[] {
new OleDbParameter("@customUnit",customUnit),
new OleDbParameter("@customCard",cNum),
new OleDbParameter("@customid",id)
};
int result = DBHelp.Query(strSql.ToString(), paras);
// bind();
Response.Redirect("Default.aspx");
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
bind();
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string id = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
string sqldel2 = "delete from tb_Custom where customid=" + id;
DBHelp.Query(sqldel2);
bind();
}
}
4>
通过DataNavigateUrlFields绑定id,DataNavigateUrlFormatStr
<asp:HyperLinkField DataNavigateUrlFields="Id"
5> ImageField:和上面的用法差不多,所呈现的表格中显示图片列,一般绑定的都是图片的路径
6> CheckBoxField: 可以使用复选框的形式显示布尔类型的数据,只有当该控件中有布尔类型的数据时才可以使用
有了上面的几种数据字段绑定类型,字段就可以很好的绑定到控件上了!
GrilView中绑定数据的时候有时候需要限制的显示,就是所谓绑定业务逻辑层带带参数显示所有信息的方法,那么他的绑定就和绑定所有的信息有所不同:
四、GirlView修改,删除确认功能
这个有两种方式给予提示确认:
1>
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
}
五、下面看看GirlView的分页
2> 当我们是通过编码的方式绑定用户控件的时候,那么这个时候你启用分页功能是不行的,这个时候需要相关操作
页面添加:
</div>
后台代码:
}
public void Datebind()
上面是当第一次加载页面的时候,我们定义的一个Pager变量,用ViewState记录回传后的页面值,然后绑定数据
}
4> Sql语句分页
用sql语句进行分页是每个面向对象语言开发分页功能的一个通用的方法,下面我们就来简单说一下
假如数据表中有16行记录,在前台一页当中我们只让现实4条,那么就是说需要分成四页,那么这个怎么去实现呢?
分析:首先我们会只让它读取4条记录,然后到第二页的时候,我们也会读取4条记录,但是是出去前面4条记录的其余记录的前4条记录,同样到第三页的时候我们会读取除了前8个之后余下所有记录的前4条记录…,知道这个原理之后分页就变的很简单了
那么sql语句就可以这样写了:
Select top 4 * from Student where id not in(select top ((page - 1) * 4) * from Student )
我们现在来写一个通用的分页读取数据的方法
Page:代表是当前页
PageSize:代表每页显示的记录数
Public static IList<Student> GetStudent(int
{
{
}
String sql=“Select top PageSize * from Student where id not in(select top line ** from Student )”;
//子语句一定要于外面的语句一样,否则会出现不一致的情况
…
…
…
}
有时候为了统计所有记录数,可以用来获取或者判断等,我们还需要读取所有记录
我们发现当总记录数/每页显示的记录数=偶数 那么页数就是这个偶数
否则如果是奇数,那么总页数就是(奇数+1)
所以我们有时候需要判断两次。
现在有一个方法可以让我们不用判断
总页数=((count-1)/pagesSize)+1;
2 以下是下拉分页
思路很简单,如果将装载下拉列表的循环放到load事件中,那么是肯定读不出gridview总页码的!
先考虑页面以及控件的执行顺序我们就能发现,load事件是发生最前面,其次读取数据库,然后绑定给GridView,在绑定的过程中又有先按照控件分页的相关限制得到页码!!
所以,我们可以知道,分页肯定应该是在GridView的数据被绑定之后才发生!!
说到这里我想应该是知道了,这个装载下拉列表的事件肯定是应该发生在GridView1_DataBound事件中的了!
代码没什么技术含量,很简单!!如下:
然后再前台调用这些方法即可完成分页功能,具体的情况具体对待,灵活使用
六、GirlView的光棒效果
七、GrilView的多选效果
Js事件
<script type="text/javascript">
</script>
如果在后台我们要执行所选的项,然后对其删除和修改
那么我们可以先遍历这些checkBox1,然后判断哪个选上了,就执行相关操作
如:
public void ChangStatus(int status)
一般而言,对于多行多列的展示,我们会选择GirlView显示,对于单行多列,或者是多行单列的数据展示,我们则会选择DataList和Repeater
他们的大部分用法和GirlView差不多,只不过他们有自己的模板,需要手动编辑布局,内容模板,分割模板等
注:获得编号可以通过自带的属性
<%# Container.DataItemIndex+1 %>