GridView的事件

CommandName
 
说明
 
“Cancel”
 
取消编辑操作并将 GridView 控件返回为只读模式。引发 RowCancelingEdit 事件。
 
“Delete”
 
删除当前记录。引发 RowDeleting RowDeleted 事件。
 
“Edit”
 
将当前记录置于编辑模式。引发 RowEditing 事件。
 
“Page”
 
执行分页操作。将按钮的 CommandArgument 属性设置为“First”“Last”“Next”“Prev”或页码,以指定要执行的分页操作类型。引发 PageIndexChanging PageIndexChanged 事件。
 
“Select”
 
选择当前记录。引发 SelectedIndexChanging SelectedIndexChanged 事件。
 
“Sort”
 
GridView 控件进行排序。引发 Sorting Sorted 事件。
 
“Update”
 
更新数据源中的当前记录。引发 RowUpdating RowUpdated 事件。
 
再实现其中的事件即可。
也可以实现RowCommand事件,通过比对CommandName属性值实现方法,但是在其中无法获取cell[]的值?

GridView中如何控制ButtonField栏的状态?
2007-01-26 16:32<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"  >
..........

*******************

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowIndex > -1)
        {
            DataRowView rv = (DataRowView)e.Row.DataItem;
            if (rv["field1"].ToString() == "1")
                ((LinkButton)e.Row.Cells[0].Controls[0]).Enabled = false;
        }
    }
   
 1)GridView
绑定数据源控件,需要有编辑和删除选项按钮时,数据源控件必须提供SQ操作L语句或存储过程调用,一般,我的推荐做法是,使用无意义的SQL语句或存储过程来使GridView的编辑和删除按钮可以生成,具体的编辑更新和删除操作在代码运行时而不是在控件设计时指定,虽然多写了一点代码,但是对以后的扩展应用是很有好处的,建议所有的数据操作,不管是简单还是复杂的,都使用三层结构,这样从WEBWIN之间的软件转换将十分轻松. 而且,统一使用三层结构,虽然代码量会多一点,但是可控制性是相当好的,如果组织合理应用统一,这样的做法也是相当高效的.

2)可以指定GridView绑定列的ReadOnly属性为false,这样在编辑生效时,将不会将此列自动设置为textbox形式的可编辑控件.

 

3)使用GridView控件中的BoundField子控件可以绑定一个数据表的某个字段列,只要将BoundField控件的DataField属性设置为要绑定的数据表的字段名,如果是存储过程select返回的比如@A,那么就将DataField设置成A;并且,可以使用 DataFormatString属性来格式化字段输出,注意,同时要将HtmlEncode属性设置为false;HeaderText属性则是 GridView表现出来的字段名称,一般将其设置为中文字段名;要设置一些其他的样式属性,比如左对齐,背景色等,通过"样式"这个属性来选择设置;另外,如果绑定到字段的数据为空时显示的默认值,则可以通过设置NullDisplayText字段来显示.

4)要设置GridView的主键,可以在其DataKeyNames属性中设置.一般,如果数据源返回5个字段,如果想自动生成列,可使 AutoGenerateColumnstrue,如果要有选择的自己设置要显示的列或需要对显示的效果做设置,则先使 AutoGenerateColumnsfalse,然后在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)GridViewDataSource属性绑定到集合类型上,:数组,泛型类,DataSet,DataTable.而它的 DataSourceID属性则绑定到特定的数据源控件上,SqlDataSource,ObjectDataSource, XmlDataSource.然后,调用DataBind()方法具体绑定数据,DataBind()前只是指定数据来源.

9)一个小技巧:GridView绑定一个对象集合时,如果该对象的公开属性是英文,GridView的列名也是英文,如果该对象的公开属性是中文, GridView的列名也是中文,这个技巧可以不同设置GridView的相关属性而得到中文字段显示的GridView报表.在一些要求特殊的场合还是一个不错的解决方法.

接着,我们来看下如何访问gridview控件中的checkbox控件。经常在gridview控件中,需要给用户多项选择的功能,这个时候就需要使用checkbox控件。首先我们建立一个模版列,其中有checkbox如下:

asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
DataKeyNames="PersonID" DataSourceID="mySource" Width="366px" CellPadding="4" ForeColor="#333333" GridLines="None"

Columns
asp:CommandField ShowSelectButton="True" /
asp:BoundField DataField="PersonID" HeaderText="PersonID" InsertVisible="False"
ReadOnly="True" SortExpression="PersonID" /

asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /
asp:TemplateField HeaderText="Select"
ItemTemplate
asp:CheckBox ID="chkSelect" runat="server" /
/ItemTemplate
HeaderTemplate
/HeaderTemplate
/asp:TemplateField
/Columns
/asp:GridView

  为了示意性地讲解如何得到用户选择的checkbox,可以增加一个按钮,当用户选择gridview中的选项后,点该按钮,则可以输出用户选了哪些选项,在按钮的CLICK事件中写入如下代码:

for (int i = 0; i GridView1.Rows.Count; i++)
{
 GridViewRow row = GridView1.Rows[i];
 bool isChecked = ((CheckBox) row.FindControl("chkSelect")).Checked;
 if (isChecked)
 {
  str.Append(GridView1.Rows[i].Cells[2].Text);
 }
}
Response.Write(str.ToString()); 

  接下来,我们添加一个全选的选择框,当用户选择该框时,可以全部选择gridview中的checkbox.首先我们在headtemplate中如下设计:

HeaderTemplate
input id="chkAll" οnclick="javascript:SelectAllCheckboxes(this);" runat="server" type="checkbox" /
/HeaderTemplate

  javascript部分的代码如下所示:

script language=javascript
function SelectAllCheckboxes(spanChk){
 var oItem = spanChk.children;
 var theBox=(spanChk.type=="checkbox")?spanChk:spanChk.children.item[0];
 xState=theBox.checked;
 elm=theBox.form.elements;
 for(i=0;ielm.length;i++)
 if(elm[i].type=="checkbox" && elm[i].id!=theBox.id)
 {
  if(elm[i].checked!=xState)
  elm[i].click();
 }
}
/script

gridview中,经常要访问其中的各类控件,比如dropdownlist,radiobutton,checkbox等,下面归纳下在gridview中访问各类控件的方法。

  首先看下如何在gridview中访问dropdownlist控件。假设在一个gridviw中,展现的每条记录中都需要供用户用下拉选择的方式选择dropdownlist控件中的内容,则可以使用如下代码,当用户选择好gridview中的dropdownlist控件的选项后,点击按钮,则系统打印出用户到底选择了哪些dropdownlist控件,并输出它们的值。

public DataSet PopulateDropDownList()
{
 SqlConnection myConnection =new SqlConnection(ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString);
 SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM tblPhone", myConnection);
 DataSet ds = new DataSet();
 ad.Fill(ds, "tblPhone");
 return ds;
}

  上面的代码首先将数据库中tblphone表的数据以dataset的形式返回。然后在页面的itemtemplate中,如下设计:

ItemTemplate
asp:DropDownList ID="DropDownList1" runat="server" DataSource="%# PopulateDropDownList() %"
DataTextField="Phone" DataValueField = "PhoneID"

/asp:DropDownList
/ItemTemplate

  这里注意dropdownlist控件的datasource属性绑定了刚才返回的dataset(调用了populatedropdownlist()方法),并要注意设置好datatextfielddatavaluefield属性。

  然后,在button的事件中,写入以下代码:

protected void Button2_Click(object sender, EventArgs e)
{
 StringBuilder str = new StringBuilder();
 foreach (GridViewRow gvr in GridView1.Rows)
 {
  string selectedText = ((DropDownList)gvr.FindControl("DropDownList1")).SelectedItem.Text;
  str.Append(selectedText);
 }
 Response.Write(str.ToString());
}

  这里,我们用循环,来获得每一行的dropdownlist控件的值,并且将值添加到字符串中最后输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值