ASP.NET2.0 GridView小技巧汇粹(转)
2010-08-31 17:05 追忆似水流年 阅读(350) 评论(0) 编辑 收藏 举报
2)可以指定GridView绑定列的ReadOnly属性为false,这样在编辑生效时,将不会将此列自动设置为textbox形式的可编辑控件.
3) 使用GridView控件中的BoundField子控件可以绑定一个数据表的某个字段列,只要将BoundField控件的DataField属性设置 为要绑定的数据表的字段名,如果是存储过程select返回的比如@A,那么就将DataField设置成A;并且,可以使用 DataFormatString属性来格式化字段输出,注意,同时要将HtmlEncode属性设置为false;HeaderText属性则是 GridView表现出来的字段名称,一般将其设置为中文字段名;要设置一些其他的样式属性,比如左对齐,背景色等,通过"样式"这个属性来选择设置;另 外,如果绑定到字段的数据为空时显示的默认值,则可以通过设置NullDisplayText字段来显示.
4) 要设置GridView的主键,可以在其DataKeyNames属性中设置.一般,如果数据源返回5个字段,如果想自动生成列,可使 AutoGenerateColumns为true,如果要有选择的自己设置要显示的列或需要对显示的效果做设置,则先使 AutoGenerateColumns为false,然后在GridView的编辑列选项操作中,自己使用BoundField控件的 DataField属性设置为要绑定的数据表的字段名,并做相应的显示设置即可.
5)GridView 有一些常用的事件,我在使用中经常用到的是:RowCommand(只要GridView控件中有按钮按下就会激发,并可找到是GridView的当前第 几行),RowDeleting(删除前,做一些判断或准备工作,我建议直接在此处调用中间业务层的数据操纵服务方法,如果判断结果是删除操作不能进行, 则可以设置e.cancel=true,则不会执行数据源控件中指定的SQL语句或存储过程),.RowDeleted(删除后,做一些善后工 作),RowUpdating(更新前),RowUpdated(更新后),RowEditing(按编辑按钮时触发),Sorting(排序 前),Sorted(排序后),SelectedIndexChanging(选择新行时,还没有做任何新动作前激 发),SelectedIndexChanged(选择新行,并执行操作时激发). 需要注重说明的是,所有操作"前"激发的事件,都有"ing"后缀名,这里一般进行一些判断工作,判断操作的条件是否满足,如果满足,则其后执行设计时数 据源控件的SQL语句或存储过程,但是,如果条件不满足,则可以使e.Cancel = true,这时将不会继续执行SQL语句和存储过程.
6) 一般,ASP.NET控件都有一个专门处理客户端脚本的属性,此属性关联一些javaScript等的脚本代码,这些客户端脚本代码将最优先执行,来进行 一些选择或判断,比如:javascript:event.returnValue = window.confirm("你真的想要删除该销售单吗?"),返回true,将正常运行此控件绑定的事件处理程序,如果返回false,则就好象没 有点击此控件一样,并不会向下执行服务端代码.
7)GridView 内部的一些按钮型控件(ButtonField),点击时触发的处理事件是相同的,可以通过设置CommandName属性的不同字符串来加以区分,如, 在RowCommand事件中,可以通过e.CommandName属性来获取点击的特定ButtonField的CommandName是否与指定的字 符串相同,从而进入不同的流程处理.
8)GridView 的DataSource属性绑定到集合类型上,如:数组,泛型类,DataSet,DataTable等.而它的DataSourceID属性则绑定到特 定的数据源控件上,如SqlDataSource,ObjectDataSource,XmlDataSource等.然后,调用DataBind()方 法具体绑定数据,DataBind()前只是指定数据来源.
9) 一个小技巧:当GridView绑定一个对象集合时,如果该对象的公开属性是英文,则GridView的列名也是英文,如果该对象的公开属性是中文,则 GridView的列名也是中文,这个技巧可以不同设置GridView的相关属性而得到中文字段显示的GridView报表.在一些要求特殊的场合还是 一个不错的解决方法.2、为GridView加入全选
<asp:TemplateField HeaderText="全选">
<HeaderTemplate>
<asp:CheckBox ID="checkall" runat="server" Text="全选"
AutoPostBack="true" OnCheckedChanged="checkAll" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="check" runat="server" Text="选择" />
</ItemTemplate>
</asp:TemplateField>
protected void checkAll(object sender, EventArgs e)
{
CheckBox cb = (CheckBox) sender;
if (cb.Text == "全选")
{
foreach (GridViewRow gvr in gvLessons.Rows)
{
CheckBox cb1 = (CheckBox)gvr.FindControl("check");
cb1.Checked = cb.Checked;
}
}
}