资源描述
数据绑定控件(二),,2,目标,使用DataGrid显示数据库中的数据使用DataGrid的模板列选择、更新和删除DataGrid中的记录,3,DataGrid控件概述,ASP.NET中的DataGrid控件用于以表格格式显示数据,DataGrid控件派生自System.Web.UI.WebControls.DataGrid类,工具箱的“Web窗体”选项卡中的DataGrid控件如图所示,要使用DataGrid控件,可在Web窗体上拖放控件或者双击工具箱中的该控件,Web窗体中的DataGrid控件如图所示,4,为DataGrid控件绑定数据2-1,要在DataGrid控件中查看数据,必须将它绑定到一个数据源使用DataSource属性为DataGrid指定数据源,然后用DataMember属性指定要显示的数据源中的表,打开VS.NET集成开发环境,选择ASP.NET应用程序,然后为项目命名,将此网页重命名为DataGridDemo.aspx,拖放DataAdapter组件,完成“数据适配器配置向导”中的步骤,选择“生成数据集”,然后给定合适的名称,将DataGrid控件添加到Web窗体,将DataGrid重命名为dgDisplay,在dgDisplay的“属性”窗口中选择DataSource和DataMember,,,,,,,,,,,,,,步骤,指定SQL服务器,并选择列,5,DataGrid的外观现在已更改,显示出表publishers中的列名,定义数据源后,应将以下两行代码添加到页面的Load事件,然后填充DataGrid,为DataGrid控件绑定数据2-2,,DataGrid,,//填充数据集SqlDataAdapterobjSqlDataAdapter.Fill(dsPublishers,"Publishers");//填充数据网格dgDisplay.DataBind();,输出结果,此属性指定唯一标识表中给定行的列,6,,,设置页眉和页脚,可使用“属性生成器”对话框设置DataGrid的页眉和页脚,属性生成器,使用“属性生成器”对话框指定各列的页脚文本和页眉文本,输出结果,7,数据格式表达式,使用数据格式表达式格式化DataGrid中显示的数据,,mm/dd/yyyy,dd/mm/yyyy,,,,,格式表达式的作用,格式化数据,右击Datagrid,选择“属性生成器”选择数据格式表达式中给出的列指定格式表达式,格式表达式设置为{0:D},设置格式表达式,,8,模板列3-1,“模板”列允许组合使用HTML控件和服务器控件设计列的自定义布局,模板只针对特定的列,不能应用于自动生成的列中,,,,,,,第1列,,第2列,,,,,,,,,,,通过右击DataGrid并选择“编辑模板”,再选择“注册”列,可将Checkbox控件添加到“模板”列,此时显示如图所示的模板编辑器,模板编辑器,9,HeaderTemplate此属性获取或设定的模板用于定义模板列的页眉ItemTemplate此属性获取或设定的模板用于显示模板列中选定的项EditItemTemplate此属性获取或设定的模板用于编辑模板列中的数据项FooterTemplate此属性获取或设定的模板用于定义模板列的页脚,将一个复选框拖放到ItemTemplate框中,DataGrid现在于“注册”列的各行中显示一个复选框,模板列3-2,模板编辑器显示模板列的四个属性:,10,复选框的选定状态由IsRegistered()返回的布尔值决定,模板列3-3,publicboolIsRegistered(stringcountry){if(country=="USA")returntrue;returnfalse;},在复选框容器中调用IsRegistered(),>,将数据绑定到模板列,确定publishers是否注册的用户自定义函数,,,11,EditCommandColumn,使用数据库时需要执行三项基本任务,分别是:选择数据更新数据删除数据,12,选择DataGrid中的行,要选择DataGrid中的记录,可使用“按钮列”中的“选择”要确定用户选择的行,可使用DataGrid的SelectedIndexChanged事件要为dgDisplay生成SelectedIndexChanged事件,可双击dgDisplay的“属性”窗口中显示的SelectedIndexChanged事件,privatevoiddgDisplay_SelectedIndexChanged(objectsender,System.EventArgse){lblMessage.Text=“您已选定"+dgDisplay.SelectedItem.Cells[1].Text;},输出结果,在DataGrid中选择记录,,,,13,更新数据4-1,呈现用于更新数据界面的方式之一是向用户提供一组数据,允许用户选择要更新的行,DataGrid控件,,EditItemIndex,EditCommandColumn,,,编辑,更新,取消,14,更新数据4-2,在“属性生成器”对话框中,将“编辑、更新、取消”从“按钮列”添加到“选定的列”列表中,要为dgDisplay生成EditCommand事件处理程序,请双击dgDisplay的“属性”窗口中显示的EditCommand事件,publicvoiddgDisplay_EditCommand(objectsource,System.Web.UI.WebControls.DataGridCommandEventArgse){dgDisplay.EditItemIndex=e.Item.ItemIndex;BindGrid();},,15,更新数据4-3,要为dgDisplay生成UpdateCommand事件处理程序,请双击dgDisplay的“属性”窗口中显示的UpdateCommand事件,publicvoiddgDisplay_UpdateCommand(objectsource,System.Web.UI.WebControls.DataGridCommandEventArgse){sqlUpdateCommand1.Parameters["@Original_pub_id"].Value=dgDisplay.DataKeys[(int)e.Item.ItemIndex];sqlUpdateCommand1.Parameters["@pub_id"].Value=((TextBox)e.Item.Cells[0].Controls[0]).Text;sqlUpdateCommand1.Parameters["@pub_name"].Value=((TextBox)e.Item.Cells[1].Controls[0]).Text;sqlUpdateCommand1.Parameters["@city"].Value=((TextBox)e.Item.Cells[2].Controls[0]).Text;sqlUpdateCommand1.Parameters["@state"].Value=((TextBox)e.Item.Cells[3].Controls[0]).Text;sqlUpdateCommand1.Parameters[“@country”].Value=((TextBox)e.Item.Cells[4].Controls[0]).Text;,try{if(sqlConnection1.State==ConnectionState.Closed){sqlConnection1.Open();sqlDataAdapter1.UpdateCommand.ExecuteNonQuery();lblMessage.Text="RecordUpdated";dgDisplay.EditItemIndex=-1;}sqlConnection1.Close();}catch(SqlExceptionexc){if(exc.Number==2627)lblMessage.Text="错误:已存在相同主键的记录";elselblMessage.Text=exc.ToString()+"错误:无法更新记录,请确保字段都"+"已正确填写";}BindGrid();},16,更新数据4-4,要为dgDisplay生成CancelCommand事件处理程序,请双击gDisplay的“属性”窗口中显示的CancelCommand事件,publicvoiddgDisplay_CancelCommand(objectsource,System.Web.UI.WebControls.DataGridCommandEventArgse){dgDisplay.EditItemIndex=-1;BindGrid();},,这确保DataGrid中无记录处于编辑模式下,显示编辑模式下的DataGrid控件dgDisplay,编辑模式下的DataGrid,,17,删除数据2-1,要为用户给出删除行的选项,可将名为“删除”的按钮列添加到DataGrid控件,,,18,privatevoiddgDisplay_DeleteCommand(objectsource,System.Web.UI.WebControls.DataGridCommandEventArgse){sqlDataAdapter1.DeleteCommand.Parameters["@Original_pub_id"].Value=dgDisplay.DataKeys[(int)e.Item.ItemIndex];try{if(sqlConnection1.State==ConnectionState.Closed){sqlConnection1.Open();sqlDataAdapter1.DeleteCommand.ExecuteNonQuery();续..,,lblMessage.Text=“删除的记录";sqlConnection1.Close();}}catch(SqlExceptionexc){lblMessage.Text=exc.ToString()+“错误:不能删除记录";}BindGrid();},删除数据2-2,要为dgDisplay生成dgDisplay_DeleteCommand事件处理程序,请双击dgDisplay的“属性”窗口中显示的DeleteCommand事件,输出结果,删除DataGrid中的记录,19,通用的ButtonColumn,除了“选择”、“编辑、更新、取消”等执行不同任务的一些命令以外,也可以将一般按钮列添加到DataGrid,添加按钮列,下列显示的代码在确定在DataGrid上的执行命令是否为Convert之后将文本形式的供应商名称转换为大写,privatevoiddgDisplay_ItemCommand(objectsource,System.Web.UI.WebControls.DataGridCommandEventArgse){if(((LinkButton)e.CommandSource).CommandName=="Convert"){lblMessage.Text=e.Item.Cells[1].Text.ToUpper();}},,确定所单击按钮的命令名称,并执行相应的代码,单击DataGrid中第一行的“转换”链接后,输出结果显示如下:,,20,DataGrid分页2-1,使用DataGrid分页可以按指定每页显示的记录数量,并显示导航按钮,为DataGrid标明页数,21,在DataGrid中与分页相关联的事件是PageIndexChanged,每当请求另一页时就会发生该事件,privatevoiddgDisplay_PageIndexChanged(objectsource,System.Web.UI.WebControls.DataGridPageChangedEventArgse){dgDisplay.CurrentPageIndex=e.NewPageIndex;BindGrid();},DataGrid分页2-2,,输出结果,22,总结,在.NET中,Web窗体DataGrid控件派生自类System.Web.UI.WebControls.DataGrid使用DataSource和DataMember属性可将DataGrid绑定到数据源TemplateColumn允许指定在列中出现的控件。TemplateColumn的页眉、页脚、项目和编辑项目等4项定义了模板列的内容和外观可使用Select、Edit、Update、Cancel和Delete等ButtonColumns来选择、更新和删除DataGrid中的记录对DataGrid进行分页使用户能按页显示指定数量的记录DataGrid的“属性生成器”对话框定义了用于自定义DataGrid的页眉、页脚、列、分页及各种其他设置,
展开阅读全文