GridView应用随笔
1、 数据绑定
GridView可以使用数据源控件和设置控件的DataSource属性来绑定数据,这里主要讲设置DataSource属性来绑定。
1、写一个返回值为DataSet或者DataTable的方法用于提取数据库中的数据,并在后台把GridView的DataSource属性设置为该DataSet或DataTable;
2、前台编辑GridView的模板,这里可以使用asp:BoundField或者asp:TemplateField来显示数据,两者之间的区别是BoundField只用于显示数据,不能设置其样式,而TemplateField不仅可以显示数据还能往里面写控件,比如DropDownList、RadioButtonList等等,然后设置HeaderText等属性;再在ItemTemplate里用<%#Eval(“”)%>把DataSource里的列名绑定好。
3、执行DataBind方法,运行一下,应该就可以显示查到的数据了。
注:这里有一个小插曲,当在后台设置完DataSource和前台绑定完数据后会显示两遍数据,即DataSource和Eval各显示一遍,这时需要设置GridView的AutoGenerateColumns="False" 就行了。
注:格式化绑定数据:<%#string.Format("[{0}]{1}",Eval("userid").ToString().Trim(),Eval("username")) %>
2、 修改
修改有点小麻烦,需要写几个事件。
1、 前台写编辑模板,即EditItemTemplate,把编辑状态下每个单元格的显示方式都写好,比如编辑时需要以DropDownList形式或者TextBox形式都写在EditItemTemplate模板中,ID、初始值都要设置好;asp:TemplateField没有ReadOnly属性,所以不想此项修改的话可以写成Label;
2、 写GridView1_RowEditing事件如下:
GridView1.EditIndex = e.NewEditIndex;
Bind();//绑定数据的方法
3、 写GridView1_RowCanCelingEdit事件如下:
GridView1.EditIndex = -1;
Bind();//绑定数据的方法
4、 写GridView1_RowUpdating事件如下:
string sql = "update Producttouser set";
string userid=((TextBox)(GridView1.Rows[e.RowIndex].FindControl("useridTxt"))).Text.ToString().Trim();
sql += " userid='" + userid.Substring(1, userid.IndexOf(']')-1);
sql += "',centeruserid=" + ((TextBox)(GridView1.Rows[e.RowIndex].FindControl("centeruseridTxt"))).Text.ToString().Trim();
sql += ",productname='" + ((TextBox)(GridView1.Rows[e.RowIndex].FindControl("productnameTxt"))).Text.ToString().Trim();
sql += "',outprice=" + ((TextBox)(GridView1.Rows[e.RowIndex].FindControl("outpriceTxt"))).Text.ToString().Trim();
sql += " where productid=" + GridView1.DataKeys[e.RowIndex]["productid"].ToString().Trim();
SQLHelper.MyNonQuery(sql);//DataKeys是获取GridView数据的好办法,需要在 GridView里添加一个属性:DataKeyNames="productid",如果需要多个 DataKeys就在DataKeyNames里添加多个,中间用逗号隔开
GridView1.EditIndex = -1;
Bind();
3、 批量删除
批量删除即是在每一行的第一单元格放一个CheckBox,最下面放两个按钮,一个是反选另一个是删除按钮。
1、 在前台模板的最前方写一个asp:TemplateField,里面放一个CheckBox,设置其ID;
2、 在反选按钮的Click事件中写如下代码:
for (int i = 0; i < GridView1.Rows.Count; i++)
{
CheckBox cb = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("cb");
//cb是CheckBox的ID属性值
if (cb.Checked == true)
{
cb.Checked = false;
}
else
{
cb.Checked = true;
}
}
注:这种反选的效果不好,选的时候页面会刷新,用Jquery实现最好。
3、 在删除按钮的Click事件中写如下代码:
string sql = "delete from Producttouser where";
string where = "";
for (int i = 0; i < GridView1.Rows.Count; i++)
{
CheckBox cb = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("cb");
if (cb.Checked == true)
{
string productid = GridView1.DataKeys[i]["productid"].ToString().Trim();
//DataKeys是获取GridView数据的好办法,需要在 GridView里添加一个属性:DataKeyNames="productid",如果需要多个 DataKeys就在DataKeyNames里添加多个,中间用逗号隔开
where += " productid=" + productid+ " or";
}
}
if (where == "")
{
Response.Write("<script>alert('您没有选中任何项!')</script>");
}
else
{
where = where.Substring(0,where.Length-3);
sql += where;
SQLHelper.MyNonQuery(sql);
Bind();
}
4、如果想要在删除之前让用户确认一下,可设置按钮的OnClientClick事件如下:
OnClientClick="return confirm('你确定要删除吗?')";
4、 分页
1、 GridView自带的有分页功能,设置属性AllowPaging="True"即开启分页功能,还可设置PageSize等属性;
2、 写GridView1_ PageIndexChanging事件如下:
GridView1.PageIndex = e.NewPageIndex;
GridView1.EditIndex = -1;//防止用户点击编辑按钮再点击下一页时出现编辑状态的小Bug
Bind();
5、排序
常用的排序是用户点击列名后数据按该列递增或递减排序;
1、 设置GridView的AllowSorting="True" 即开启排序功能;
2、 在前台的每个模板里设置SortExpression属性为该列列名;
3、 在Page_Load事件中写如下代码:
if (!Page.IsPostBack)
{
ViewState["SortOrder"] = "userid";
ViewState["OrderDire"] = "ASC";
Bind();
}
4、 写GridView1_Sorting事件如下:
string sPage = e.SortExpression;
if (ViewState["SortOrder"].ToString() == sPage)
{
if (ViewState["OrderDire"].ToString() == "Desc")
ViewState["OrderDire"] = "ASC";
else
ViewState["OrderDire"] = "Desc";
}
else
{
ViewState["SortOrder"] = e.SortExpression;
}
Bind();
5、 Bind方法代码如下:
string sql = "select top 200 Producttouser.userid,username,centeruserid,productid,productname,outprice,brandid,maintype,barcode from Producttouser,
userbaseinfo where Producttouser.userid=userbaseinfo.userid and nowcancel=0";
DataTable dt = SQLHelper.ExecuteDataTable(sql);
DataView dv = dt.DefaultView;
if (ViewState["SortOrder"] != null && ViewState["OrderDire"] != null)
{
string sort = (string)ViewState["SortOrder"] + " " + (string)ViewState["OrderDire"];
dv.Sort = sort;
}
GridView1.DataSource = dv;
GridView1.DataBind();
6、 全选/反选
上次说到全选和反选是用的服务器控件,缺点很明显,点击按钮的时候页面会刷新,效率也不高,这次用Jquery实现的全选/反选就很好了,只需要设置反选按钮的Click事件即可,这里的CheckBox还是服务器控件,所以就用了Type属性获取,代码如下:
function ReCheck() {
$("#GridView1 input[type='checkbox']").each(function () {
if (this.checked) {
this.checked = false;
}
else {
this.checked = true;
}
})
}
7、条件查询
实际工作中经常会遇到让用户选择条件进行查询数据,效果如图:
这实际上就是一条SQL语句的事儿,但笔者在实现这个小功能时还是遇到了些问题。
这里用的都是服务器端控件,后台获取到Ddl和Txt的数据后写了一条查询语句如下:
select top 200 Producttouser.userid,username,centeruserid,productid,productname,outprice,brandid,maintype,barcode from Producttouser,
userbaseinfo where Producttouser.userid=userbaseinfo.userid and nowcancel=0 and @searchType=@id
然后传入参数执行查询,但一直查不出数据,最后把@searchType换成字符串拼接才算 查出了数据,最后得出结论,参数化SQL语句中的参数只能是具体的值,而不是能列名, 这里我就是把查询条件中的列名(searchType)当做参数处理了,也就查不到数据了(吐 槽一下:SQLServer你TM就不会报个错么?)
GridView应用随笔的更多相关文章
- android 项目学习随笔十七(ListView、GridView显示组图)
ListView.GridView显示组图,处理机制相同 <?xml version="1.0" encoding="utf-8"?> <Li ...
- Android开发随笔之ScrollView嵌套GridView[ 转]
今天在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全,为了解决这个问题查了N多资料,某个谷歌的 ...
- 简单随笔——如何在gridview的页脚显示信息。。。。
我是超级大菜鸟...哈哈 先上图看看是不是你需要的 第一步,右击gridview,在事件中,单击RowdataBond事件. 在这之前一定要记得在gridview属性中的ShowFooter设置为“t ...
- 在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能
在我上篇随笔<在DevExpress程序中使用Winform分页控件直接录入数据并保存>中介绍了在GridView以及在其封装的分页控件上做数据的直接录入的处理,介绍情况下数据的保存和校验 ...
- .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】
1.首先在前台dataGridview属性中增加onRowDataBound属性事件 2.然后在后台Observing_RowDataBound事件中增加代码 protected void Obser ...
- 在GridView列表中使用图片显示记录是否包含附件
在我的前面很多文章中,都介绍过通用附件模块的管理,本篇随笔主要介绍在一些应用模块中的列表展示中,包含附件的记录,在GridView列表界面中使用图标来快速显示是否有附件的情况. 1.通用附件模块的应用 ...
- DevExpress gridview下拉框的再次研究
原文:DevExpress gridview下拉框的再次研究 前几天写了一篇关于研究DevExpress gridview下拉框的随笔(DevExpress gridview下拉框repository ...
- Gridview AutoGenerateColumns属性
第一篇随笔,以后会陆续的把刚开始工作时的知识点都记录下来,毕竟现在用WebForm的不多了~ AutoGenerateColumns MSDN 说明 : 获取或设置一个值,该值指示是否为数据源中的每个 ...
- GridView动态添加列并判断绑定数据DataTable的列类型控制展示内容
此篇随笔是2013年根据项目需求开发记录的,不一定符合大众口味,只需了解开发思路,毕竟解决方案多种多样. 下面简单说说需求点吧: (1)通过下拉列表可以选择一个DataSet(数据集),一个DataS ...
随机推荐
- 淘宝的数据库拆分(TDDL)(转)
淘宝的数据拆分历程 系 统刚开始的时候,因为系统刚上线,用户不多,那个时候,所有的数据都放在了同一个数据库中,这个时候因为用户少压力小,一个数据库完全可以应付的了,但是 随着运营那些哥们辛苦的呐喊和拼 ...
- Antx简介(ali_PPT)
Antx的由来: §最早,我们用Makefile来build系统 •Makefile不适合Java的编译 §后来,我们用Ant来build系统 •开始时很不错 •随着项目增多,出现困难 §利用bean ...
- 《R包的分类介绍》
R分析空间数据(Spatial Data) R机器学习包(Machine Learning) R多元统计包(Multivariate Statistics) R药物(代谢)动力学数据分析包 R计算计量 ...
- 最简化模型2——css3分阶段动画效果(经过实测)之转动的div
@keyframes mymove{ 0%{top: 0;left: 0;transform:rotate(50deg);} 10%{top: 100px;left: 50px;trans ...
- C#中如何使用IComparable<T>与IComparer<T>接口(转载)
本分步指南描述如何使用两个接口: IComparer和IComparable.在同一篇文章中讨论这些接口有两个原因.经常在一起,使用这些接口和接口类似 (并且有相似的名称),尽管它们用于不同用途. 如 ...
- C语言strstr()函数:返回字符串中首次出现子串的地址
今天又学到了一个函数 头文件:#include <string.h> strstr()函数用来检索子串在字符串中首次出现的位置,其原型为: char *strstr( char *s ...
- 搜索框(SearchView)的功能与用法
SearchView是搜索框组件,它可以让用户在文本框内输入汉字,并允许通过监听器监控用户输入,当用户用户输入完成后提交搜索按钮时,也通过监听器执行实际的搜索. 使用SearchView时可以使用如下 ...
- java操作redis redis连接池
redis作为缓存型数据库,越来越受到大家的欢迎,这里简单介绍一下java如何操作redis. 1.java连接redis java通过需要jedis的jar包获取Jedis连接. jedis-2.8 ...
- 关于Task的一点思考和建议
前言 本打算继续写SQL Server系列,接下来应该是死锁了,但是在.NET Core项目中到处都是异步,最近在写一个爬虫用到异步,之前不是很频繁用到异步,当用到时就有点缩手缩尾,怕留下坑,还是小心 ...
- java_XML_SAX
用SAX解析XML采用的是从上而下的基于事件驱动的解析方式,在解析过程中会视情况自动调用startDocument().startElement().characters().endElement() ...