ASP.NET中Web DataGrid的使用指南(2)
点击次数:22 次 发布日期:2008-11-26 12:29:01 作者:源代码网
|
源代码网推荐 源代码网推荐 假设DataGrid的第一列声明如下 源代码网推荐 源代码网推荐 <asp:HyperLinkColumn DataTextField="au_id" HeaderText="au_id" DataNavigateUrlField="au_id" DataNavigateUrlFormatString="Edit.aspx?id={0}"></asp:HyperLinkColumn> 源代码网推荐 源代码网推荐 读取的时候可以用: 源代码网推荐 源代码网推荐 //Items[0]表示第一行,Cells[0]表示第一列,Controls[0]表示Cell中的第一个控件(也只有这个控件可以用) 源代码网推荐 源代码网推荐 HyperLink link = (HyperLink)DataGrid1.Items[0].Cells[0].Controls[0]); 源代码网推荐 源代码网推荐 Response.Write(link.Text); 源代码网推荐 源代码网推荐 至于模板列(TemplateColumn),当然也可以通过DataGrid1.Items.Cells[j].Controls[n]来获取,然后转换成原来的控件类型再操作,但是还有个更好的办法,就是用FindControl来查找控件。 源代码网推荐 源代码网推荐 FindControl是System.Web.UI.Control的方法,可以根据子控件ID来查找子控件 源代码网推荐 源代码网推荐 比如: 源代码网推荐 源代码网推荐 假设DataGrid的某一列声明如下 源代码网推荐 源代码网推荐 <asp:TemplateColumn> 源代码网推荐 源代码网推荐 <ItemTemplate> 源代码网推荐 源代码网推荐 <asp:TextBox Runat="server" ID="txtID" Text=<%# DataBinder.Eval(Container.DataItem,"au_id") %>> 源代码网推荐 源代码网推荐 </asp:TextBox> 源代码网推荐 源代码网推荐 </ItemTemplate> 源代码网推荐 源代码网推荐 </asp:TemplateColumn> 源代码网推荐 源代码网推荐 读取方法: 源代码网推荐 源代码网推荐 TextBox txt = (TextBox)DataGrid1.Items[1].FindControl("txtID"); 源代码网推荐 源代码网推荐 Response.Write(txt.Text); 源代码网推荐 源代码网推荐 注意:DataList中是没有Cell的 源代码网推荐 源代码网推荐 三、事件 源代码网推荐 源代码网推荐 1、ItemCommand、CancelCommand、DeleteCommand、EditCommand、UpdateCommand 源代码网推荐 源代码网推荐 也就是DataGrid中,点击Button、LinkButton后执行的事件,执行的事件取决于按钮的CommandName。其实最主要的一个是ItemCommand,而后面四个都只是ItemCommand的一小部分, 源代码网推荐 源代码网推荐 比如一个按钮的CommandName为"Cancel",当返回后,首先执行的是ItemCommand事件,然后才是CancelCommand事件。 源代码网推荐 源代码网推荐 2、PageIndexChanged 源代码网推荐 源代码网推荐 如果你的DataGrid是分页的,那当你在DataGrid上点击Pager上的1、2、3或者<、>时,就会激发这个事件。 源代码网推荐 源代码网推荐 在这个事件里面,你可以用e.NewPageIndex来读取要改变的页,然后赋值给DataGrid的CurrentPageIndex属性,最后不要忘了,还要设置DataSource,还要执行DataBind。 源代码网推荐 源代码网推荐 注意:DataList中没有这个事件,如果需要在DataList中分页,可以一段一段的读取数据,然后把当前段的数据绑定到DataList上。 源代码网推荐 源代码网推荐 3、ItemDataBound,ItemCreated 源代码网推荐 源代码网推荐 首先要说的是这两个事件的发生时间。 源代码网推荐 源代码网推荐 ItemDataBound嘛,只要执行了DataBind方法,就会马上激发这个事件。 源代码网推荐 源代码网推荐 ItemCreated呢,如果页面是第一次访问(Page.IsPostBack = false),那在第一次执行DataBind的时候,会先激发ItemCreated事件,也就是说,执行了DataBind后,首先会用ItemCreated来建立Header行,然后用ItemDataBound来绑定Header行,再用ItemCreated来建立第一行,再调用ItemDataBound来绑定第一行,也就是说ItemCreated和ItemDataBound是交替执行的。 源代码网推荐 源代码网推荐 页面返回时,也会执行ItemCreated 源代码网推荐 源代码网推荐 事件,在Page_Load之前,但是这时候就不会再执行ItemDataBound事件了。 源代码网推荐 源代码网推荐 所以,如果你想在DataGrid里动态添加什么控件,就需要在ItemCreated事件中,而不是在ItemDataBound事件中。 源代码网推荐 源代码网推荐 源代码网推荐 四、代码片断 源代码网推荐 源代码网推荐 1、DataGrid显示双层表头 源代码网推荐 源代码网推荐 假设你的DataGrid有三列,现在想将前两列作为"大类1",第三列作为"大类2",现在,你可以在ItemDataBound事件中加入下面的代码: 源代码网推荐 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
