10-使用 GridView 和DetailView实现的主从报表

合集下载

scott笔记

scott笔记

重要属性:RowState:来决定这些DataRow是否被改动过,或是新记录,或是被删除的记录,然后为每个记录发出合适的数据库命令。

InsertCommand:向数据库发出对应的INSERT命令。

UpdateCommand:向数据库发出对应的UPDATE命令。

DeleteCommand:向数据库发出对应的DELETE命令。

ExecuteMode:查询的ExecuteMode。

Read:返回数据行、Scalar:返回单个值、NonQuery:返回一个整数,指受影响的记录数。

重要方法:为GridView指定数据源:GridView1.DataSource = productsAdapter.GetProducts();为GridView 绑定数据:GridView1.DataBind();1.要访问弱类型DataTable中的一个特定字段,我们需要用这样的句法:DataTable.Rows[index] ["columnName"]。

这个例子中的DataTable的弱类型性质表现在于,我们需要通过一个字符串或序号索引来访问字段名称。

而在另一个方面,一个强类型的DataTable,它的所有的字段都是通过属性的形式来实现的,访问的编码就会象这样:DataTable.Rows[index].columnName。

2.强类型的DataSet 起了强类型对象的集合的作用,它由强类型DataTable实例组成,每个强类型DataTable又进而由强类型的DataRow实例组成。

强类型的DataTable并不包括如何访问对应底层的数据表的任何信息。

要获取用来填充DataTable的数据,我们使用TableAdapter类,它提供了数据访问层的功能。

3.填充DataTable –这个做法会生成一个方法,该方法接受一个DataTable的参数,基于查询的结果填充这个DataTable。

譬如,的DataAdapter类就是在它的Fill()方法中实现这个模式的。

富数据控件DetailsView和FormView

富数据控件DetailsView和FormView

富数据控件DetailsView和FormViewDetailsView 和 FormView 擅长于每次都只显⽰⼀个记录,并包含⼀个可选的分页按钮。

DetailsView 和 FormView 的差别在于:DetailsView 显⽰表中的内容,⽽ FormView 更加灵活,可以在⽆表的情况下显⽰内容。

如果打算使⽤模版,FormView 会提供最⼤的灵活性,否则,DetailsView 会提供⼀个更简单的模型。

DetailsViewDetailsView 被设计为每次只显⽰⼀个记录,它把信息段(字段或属性)放⼊到⼀个表的单独⾏中。

只要你把 AllPaging 设为 true,它还允许你借助分页控件从⼀个记录浏览到另⼀个。

<asp:SqlDataSource ID="sourceEmployees" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>"ProviderName="System.Data.SqlClient" SelectCommand="select * from Employees"></asp:SqlDataSource><asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px" DataSourceID="sourceEmployees"AllowPaging="true" PagerSettings-Mode="Numeric"><PagerStyle HorizontalAlign="Center" /></asp:DetailsView>使⽤ DetailsView 做⼀个单项记录的分页浏览显得颇有诱惑⼒,遗憾的是这样的效率可能不太⾼。

通用GridView控件简化信息及详细显示的实现

通用GridView控件简化信息及详细显示的实现

数 据 源 的 . 列 表 示 一 个 字 段 。 每 行 表 示 一 条 记 录 每 而 但 是 当某 条 记 录 的某 个 字 段 相 当长 时 .例 如 说 存 放 的
是 新 闻信 息 . 时通 过 G i i 控 件 以表 格 方 式 显示 出 这 r Ve d w
来的信息显得相 当冗长 , 不利于方便阅读 。 利用.E 技 N T
t ntn ) i Sr g o i ;
数据 库 类 . 以能 够保 证 多种 不 同对 象 的操 作
( ) 接 字 符 串C n e t n t n 的设 置 1连 O n ci Sr g o i
Slo adcmm n qC mm n o ad= nw S lo m n ( lcn e- e qC m a ds , on c q
0 引

t n t n , 的设 置 可 以 由用 户 在 调 用 的 时 候 灵 活 的 i Sr g o i  ̄性 设置 , 而实 现 数 据 库 的动 态 连 接 。以 下有 两种 方 法 : 从

G iV e 控 件 作 为 AS .E .下 的 D tG i的 替 r iw d PN T 11 aa r d 代 品 . 现 在 AS . T 20 数 据 绑 定 中非 常 实 用 的控 是 PNE .中
件之一 . 能够通过很简单的操作显示大量的信息 . 它 它
内 置 了表 来 在 表 中 显 示
p bi S lbs ig o nci Sr g u l qD (r n et n tn) c tn c o i
p ia e srn o ne t S rng rv t ti g c n ci ti ; on
的 数 据 库 操 作 , 据 实 际设 计 的不 同 。 类 中 的 数 据 操 根 此

GridView控件的说明和使用

GridView控件的说明和使用

GridView控件的学习和使用一.数据绑定简介数据绑定就是将数据源中的数据显示到数据服务控件中。

数据源可以是数据库表、数组、集合等。

数据服务控件是专门用于在页面上显示数据的一种控件。

我们将主要介绍GridView控件、DataList控件、Repeater控件。

所有的数据绑定都通过DataBind()函数来实现。

在实现数据绑定的时候,首先要指明数据源,然后再使用DataBind()函数。

GridView1.DataSource = dataset;GridView1.DataBind();二.GridView控件简介GridView控件是2003中DataGrid控件的升级版本,它提供了比DataGrid更强大的功能,同时比DataGrid更加易用。

GridView控件是一个功能强大的控件。

它可以使用数据绑定技术,在数据初始化的时候绑定一个数据源,从而显示数据。

除了能够显示数据外,还可以实现编辑、排序和分页等功能,而这些功能的实现有时可以不写代码或写很少的代码。

三.GridView控件的属性GridView控件的属性很多,总体上可以分为分页、数据、行为、样式等几类。

1)分页:主要是设置是否分页、分页标签的显示样式、页的大小等。

2)数据:设置控件的数据源。

3)行为:主要进行一些功能性的设置,如:是否排序、是否自动产生列、是否自动产生选择删除修改按钮等。

4)样式:设置GridView控件的外观,包括选择行的样式、用于交替的行的样式、编辑行的样式、分页界面样式、脚注样式、标头样式等。

具体属性的解释参见示例演示四. GridView控件的事件GridView控件的事件非常丰富。

当在GridView控件上操作时就会产生相应的事件。

要实现的功能代码就写在相应的事件中。

GridView控件的常用事件主要有:1)PageIndexChanging:当前索引正在改变时触发。

2)RowCancelingEdit:当放弃修改数据时触发。

Gridview用法(个人总结)202X803

Gridview用法(个人总结)202X803

Gridview用法(个人总结)202X803Gridview用法(个人总结)202*0803Gridview的一些操作:1、添加删除列:直接使用Gridview的删除事件:1)选择Gridview的右上角任务栏,打开之后选择编辑列,然后选择CommandFiled,打开CommandFiled选择删除,然后选择添加,设置HeadText为删除。

2)打开Gridview控件的属性对话框,在事件中双击RowDeleting,然后添加删除事件代码:protectedvoidGridView1_RowDeleting(objectsender,GridViewDelete EventArgse){StringBuildersb=newStringBuilder();sb.AppendFormat(@"DELETEFRO MSUPPLIERSWHEREID="+Convert.ToInt32(GridView1.DataKeys[e.RowIndex] .Value));SQLHelperhelper=newSQLHelper();helper.ExecuteSql(sb.ToStr ing());Bindon();}不使用Gridview的删除事件:使用添加LinkButton的方法实现删除选定行1)选择Gridview的右上角任务栏,打开之后选择编辑列,然后选择TemplateField,设置HeadText为删除,然后在脚本中添加下面代码:2)打开Gridview控件的属性对话框,在事件中双击RowDataBound,添加如下代码://获取删除行的IDif(e.Row.RowType==DataControlRowType.DataRow){stringid=GridVie w1.DataKeys[e.Row.RowIndex].Value.ToString();//得到idLinkButtonibtnDel=(LinkButton)e.Row.FindControl("delet");//实例化LinButton按钮控件mandArgument=id;//指定删除按钮的关联参数ibtnDel.Attributes.Add("onclick","returnconfirm("确定要删除吗?");");}3)打开Gridview控件的属性对话框,在事件中双击RowCommand,添加如下代码:if(mandName=="del"){stringid=mandArgument.ToString();//获得IDStringBuildersb=newStringBuilder();sb.AppendFormat(@"DELETEFROMSUPPLIERSWHEREID="+id);SQLHelperhe lper=newSQLHelper();helper.ExecuteSql(sb.ToString());Bindon();}即可。

[教学研究]DataGridView显示主从表示例及注意事项

[教学研究]DataGridView显示主从表示例及注意事项

DataGridView显示主从表示例及注意事项(转) 收藏(转载来源:http://blog.c /hulihui)在.NET的Windows Forms数据处理应用中,经常需要处理主从表情况。

例如:SQL Server 2000的Northwind数据库Custumers表和Orders表中,一个客户对应多个定单(用关系数据库理论的ER概念模型描述,客户实体与定单实体是1:N的关系)。

编程时,可以用一个DataGridView显示Customers记录(主表),另一个DataGridView 显示当前Customer的定单明细(从表)。

当点选主表DataGridView的Customers记录时,从表DataGridView自动过滤显示对应CustomerID的全部Orders记录(见上图)。

C# 2005/2008中的BindingSource组件和DataSet/DataRelation类提供了一个简便的处理方法,见如下实现步骤和示例代码。

1.建立一个DataSet数据集对象,使用DataAdaper填充两个DataTable表:Customers和Orders,分别包含全部的Customers记录和Orders记录。

也可直接创建和填充数据表;2.以Custumers的主键CustomerID和Orders的外键CustomerIdD建立一个主从DataRelation关系对象,并添加该对象到DataSet中;3.使用两个BindingSource组件:bs_Customers和bs_Orders,分别连接表数据集DataSet的表Customers和关系DataRelation;4.使用两个DataGridView组件,分别连接bs_Customers和bs_Orders。

下面是全部程序示例代码,测试运行时须有SQL Server 2000的Northwind数据库,不使用数据库且直接创建数据表的代码参见本文最后给出的简例。

史上最全GridView使用方法

史上最全GridView使用方法

史上最全GridView使用方法快速预览:GridView无代码分页排序GridView选中,编辑,取消,删除GridView正反双向排序GridView和下拉菜单DropDownList结合GridView和CheckBox结合鼠标移到GridView某一行时改变该行的背景色方法一鼠标移到GridView某一行时改变该行的背景色方法二GridView实现删除时弹出确认对话框GridView实现自动编号GridView实现自定义时间货币等字符串格式GridView实现用“...”代替超长字符串GridView一般换行与强制换行GridView显示隐藏某一列GridView弹出新页面/弹出新窗口GridView固定表头(不用javascript只用CSS,2行代码,很好用) GridView合并表头多重表头无错完美版〔以合并3列3行举例〕GridView突出显示某一单元格〔例如金额低于多少,分数不及格等〕GridView加入自动求和求平均值小计GridView数据导入Excel/Excel数据读入GridView在对GridView编辑的时候实现自动计算实现类似winform的点击行选中功能GridView在编辑的时候控制编辑框的列宽。

给Gridview加入Tooltip的功能:效果图:1.AllowSorting设为True,aspx代码中是AllowSorting="True";2.默认1页10条,如果要修改每页条数,修改PageSize即可,在aspx代码中是PageSize="12"。

3.默认的是单向排序的,右击GridView弹出“属性”,选择AllowSorting为True即可。

2.GridView选中,编辑,取消,删除:效果图:后台代码:你可以使用sqlhelper,本文没用。

代码如下:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page{//清清月儿SqlConnection sqlcon;SqlCommand sqlcom;string strCon = "Data Source=(local);Database=数据库名;Uid=帐号;Pwd=密码";protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){bind();}}protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) {GridView1.EditIndex = e.NewEditIndex;bind();}//删除protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) {string sqlstr = "delete from 表where id='" +GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr,sqlcon);sqlcon.Open();sqlcom.ExecuteNonQuery();sqlcon.Close();bind();}//更新protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) {sqlcon = new SqlConnection(strCon);string sqlstr = "update 表set 字段1='"+((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',字段2='"+((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "',字段3='"+((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where id='"+ GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";sqlcom=new SqlCommand(sqlstr,sqlcon);sqlcon.Open();sqlcom.ExecuteNonQuery();sqlcon.Close();GridView1.EditIndex = -1;bind();}//取消protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e){GridView1.EditIndex = -1;bind();}//绑定public void bind(){string sqlstr = "select * from 表";sqlcon = new SqlConnection(strCon);SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);DataSet myds = new DataSet();sqlcon.Open();myda.Fill(myds, "表");GridView1.DataSource = myds;GridView1.DataKeyNames = new string[] { "id" };//主键GridView1.DataBind();sqlcon.Close();}}前台主要代码:... ...<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"ForeColor="#333333" GridLines="None"OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing"OnRowUpdating="GridView1_RowUpdating"OnRowCancelingEdit="GridView1_RowCancelingEdit"><FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /><Columns><asp:BoundField DataField="身份证号码" HeaderText="用户ID" ReadOnly="True" /><asp:BoundField DataField="" HeaderText="用户" /><asp:BoundField DataField="职工性别" HeaderText="性别" /><asp:BoundField DataField="家庭住址" HeaderText="家庭住址" /><asp:CommandField HeaderText="选择" ShowSelectButton="True" /><asp:CommandField HeaderText="编辑" ShowEditButton="True" /><asp:CommandField HeaderText="删除" ShowDeleteButton="True" /> </Columns><RowStyle ForeColor="#000066" /><SelectedRowStyle BackColor="#669999" Font-Bold="True"ForeColor="White" /><PagerStyle BackColor="White" ForeColor="#000066"HorizontalAlign="Left" /><HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /></asp:GridView>3.GridView正反双向排序:〔用到数据库视图DATAVIEW及GRIDVIEW的VIEWSTAT 类〕效果图:点各2次的排序,点其他也一样可以。

GridViewDetailsView等控件结合使用范例讲解

GridViewDetailsView等控件结合使用范例讲解

当我们要显示的数所量比较大时,用GridView时就会将页面拉的很长,这样用户单击编辑或者删除时就很不方便,这种情况有两种解决方案:1.是用GridView控件只显示适当的一小部分数据,然后在最后加一个链接,链向修改页面;效果图:方法:我们在GridView控件中添加模板列,在模板列中添加HyperLink控件,然后在GridView控件的RowDataBound事件里来获取这个HyperLink控件,对它的NavigateUrl属性进行赋值。

代码:<asp:TemplateField HeaderText="操作"><HeaderStyle HorizontalAlign="Center" /><ItemTemplate><asp:HyperLink ID="HyperLink1" runat="server"NavigateUrl="WF_WeishengStation_DWCDJY_Add_First.aspx?id="Width="80px" Target="_blank">修改内容</asp:HyperLink></ItemTemplate></asp:TemplateField>protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){//如果是绑定数据行if (e.Row.RowType == DataControlRowType.DataRow){if (e.Row.RowState ==DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate){//我的这个操作列在倒数第二列,所以为this.GridView1.Columns.Count - 2//如果有多个控件,比如还有第二个HyperLink控件,可以Controls[1]//我的第0列为编号,所以这里通过这样传递参数:e.Row.Cells[0].Text((HyperLink)e.Row.Cells[this.GridView1 .Columns.Count - 2].Controls[0]).NavigateUrl += e.Row.Cells[0].Text。

使用DevExpress 的 ASPxGridView 控件显示主从表

使用DevExpress 的 ASPxGridView 控件显示主从表

首先要准备两个数据源,一个是主表数据源,一个是从表数据源。

从表数据源<asp:AccessDataSource ID="AccessDataSource_Detail" runat="server" DataFile="~/App_Data/Master-Detail.mdb"SelectCommand="SELECT * FROM [订单明细] WHERE ([订单ID] = ?)" DeleteCommand="DELETE FROM [订单明细] WHERE [订单明细ID] = ?" InsertCommand="INSERT INTO [订单明细] ([订单明细ID], [订单ID], [售出日期], [数量], [单价], [折扣]) V ALUES (?, ?, ?, ?, ?, ?)" UpdateCommand="UPDATE [订单明细] SET [订单ID] = ?, [售出日期] = ?, [数量] = ?, [单价] = ?, [折扣] = ? WHERE [订单明细ID] = ?"><SelectParameters><asp:SessionParameter Name="订单_ID" SessionField="OrderID" Type="Int32" /></SelectParameters></asp:AccessDataSource>这个地方有一点需要注意的是SelectParameters 的SessionField 属性。

由于SelectCommand 带一个参数,这个参数的值是存放在Session中的,这个参数的Session名字是OrderID。

10-使用 GridView 和DetailView实现的主从报表

10-使用 GridView 和DetailView实现的主从报表

导言在前面的教程我们看到了如何使用两个页面(一个主页,用于列出供应商; 一个明细页,用于显示选定供应商提供的产品)创建主/从报表 . 这种两个页面的报表格式也可以集中在一个页面上. 这篇教程将会使用一个GridView, 它的每一行都包含产品的名称和单价以及一个选择按钮. 单击一个产品的选择按钮会在同一页的DetailsView控件上显示该产品的全部详细信息.图1: 单击选择按钮显示产品明细Step 1: 创建一个可选择行的GridView回想一下前面的跨页的主/从报表, 它的每个主记录包含了一个超链接, 当点击该链接时转到详细信息页,并在查询字符串中传递所单击行的SupplierID值. 这个链接是通过在GridView上使用HyperLinkField实现的. 对于单页的主/从报表,每个GridView行需要一个按钮, 单击该按钮时显示详细信息. GridView控件可以在每行包含一个选择按钮, 单击该按钮时会引起一次回发并把该行做为GridView的SelectedRow值.先给Filtering 文件夹下的DetailsBySelecting.aspx页添加一个GridView控件, 设置ID属性为ProductsGrid, 然后增加一个新的ObjectDataSource并命名为AllProductsDataSource, 它调用ProductsBLL类的GetProducts()方法图2: 创建一个ObjectDataSource 并命名为AllProductsDataSource图3: 使用ProductsBLL 类图4: 配置ObjectDataSource 调用GetProducts() 方法编辑GridView的字段, 移除ProductName和UnitPrice以外的字段. 也可以根据需要自定义绑定字段,比如格式化utitPrice字段为货币,修改绑定字段的HeaderText属性. 这些操作可以在设计视图完成, 单击GridView智能标记上的编辑列, 或是手工配置声明的语法.图5: 移除ProductName 和UnitPrice 以外的列.最后的GridView标记如下:<asp:GridView ID="ProductsGrid" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID"DataSourceID="AllProductsDataSource" EnableViewState="False"><Columns><asp:BoundField DataField="ProductName" HeaderText="Product"SortExpression="ProductName" /><asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}" HeaderText="Unit Price"HtmlEncode="False" SortExpression="UnitPrice" /></Columns></asp:GridView>接下来, 我们需要设置GridView为可以选择行, 这会为每一行增加一个选择按钮. 要实现该功能, 只要选中GridView智能标记上的”启用选定内容”的复选框就可以了.图6: 让GridView 的行可选选中”启用选定内容”项会给ProductsGrid GridView增加一个命令字段并设置ShowSelectButton属性为True.这样GridView的每一行都会有一个选择按钮, 如图6所示. 默认情况下, 选择按钮以链接的形式呈现, 但是你也可以使用按钮或图片按钮来代替, 修改CommandField的ButtonType属性即可.<asp:GridView ID="ProductsGrid" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID"DataSourceID="AllProductsDataSource" EnableViewState="False"><Columns><asp:CommandField ShowSelectButton="True" /><asp:BoundField DataField="ProductName" HeaderText="Product"SortExpression="ProductName" /><asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}" HeaderText="Unit Price"HtmlEncode="False" SortExpression="UnitPrice" /></Columns></asp:GridView>单击GridView的选择按钮时会引起一次回发, GridView的SelectedRow属性也会更新. 除了SelectedRow属性, GridView还提供了SelectedIndex, SelectedValue, 和SelectedDataKey属性. SelectedIndex属性返回选中行的索引, SelectedValue和SelectedDataKey属性返回基于GridView的DataKeyNames属性的值.DataKeyNames属性让每一行关联一个或多个数据字段, 经常用于唯一标识GridView行. SelectedValue属性返回选中行的DataKeyNames中的第一个数据字段的值, SelectedDataKey返回选中行的DataKey对象, 它包含了该行的所有指定数据主键字段的值.在设计视图上绑定数据源到GridView, DetailsView, FormView时DataKeyNames属性被自动设置为数据源中唯一标识的数据字段. 尽管在前面的教程中这个属性都是自动设置的,示例可以不需要专门指定的DataKeyNames属性就可以运行. 但对于本教程中的可选择行的GridView以及后面我们要研究GridView中的新增,更新,删除的教程中, DataKeyNames 属性必须合理地设置.确保GridView的DataKeyNames属性已经设置为ProductID.在浏览器浏览一下我们所完成的工作. GridView列出了所有产品的名称和单价以及一个选择按钮. 单击选择按钮触发一次回发. 在第二步中我们将会看到如何让一个DetailsView响应该回发事件并显示选中产品的详细信息.图7: 每个产品行都包含一个选择链接按钮.高亮显示选中行ProductsGrid GridView 有一个SelectedRowStyle属性, 该属性决定了选中行的外观. 合理的使用可以更清晰的显示当前选中的行以改善用户体验. 对于本教程, 我们使用黄色的背景来高亮显示选中行.与前面的教程一样, 我们要尽量保持美的外观.在Styles.css中定义一个新的CSS类并命名为SelectedRowStyle..SelectedRowStyle{background-color: Yellow;}要对本系列教程中的所有GridView的SelectedRowStyle属性应用这个CSS类,编辑DataWebControls 主题下的GridView.skin外观文件如下:<asp:GridView runat="server" CssClass="DataWebControlStyle"><AlternatingRowStyle CssClass="AlternatingRowStyle" /><RowStyle CssClass="RowStyle" /><HeaderStyle CssClass="HeaderStyle" /><SelectedRowStyle CssClass="SelectedRowStyle" /></asp:GridView>修改后,GridView的选中行用黄色的背景高亮显示图8:使用GridView的SelectedRowStyle 属性自定义选中行的外观Step 2: 在DetailsView中显示选中产品的详细信息完成ProductsGrid GridView后, 剩下就是增加一个DetailsView, 它显示选中的产品的详细信息. 在GridView的上方添加一个DetailsView控件并创建一个新的数据源命名为ProductDetailsDataSource. 由于我们想让这个DetailsView显示选中产品的详细信息, 配置ProductDetailsDataSource使用ProductsBLL类的GetProductByProductID(productID)方法.图9: 调用ProductsBLL 类的GetProductByProductID(productID) 方法让productID从GridView控件的SelectedValue属性获取参数值.如同我们前面讨论过的, GridView的SelectedValue属性返回选中行的第一个数据键值. 因此必须把GridView的DataKeyNames属性设置为ProductID, 这样选中行的ProductID就可以通过SelectedValue属性返回了.图10: 把productID 参数关联到GridView的SelectedValue 属性.配置好productDetailsDataSource ObjectDataSource并把它绑定到DetailsView后, 这篇教程就算完成了! 第一次访问时没有行被选中, 所以GridView的SelectedValue属性返回null. 由于没有ProductID值为Null的产品, GetProductByProductID(productID)方法不返回任何记录, DetailsView也就无法显示(如图11). 单击GridView的选择按钮后会引起一次回发并更新DetailsView. GridView的SelectedValue属性返回选中行的ProductID, GetProductByProductID(productID)方法返回特定产品的信息ProductsDataTable, DetailsView显示这些详细信息(如图12).图11: 第一次访问时只显示GridView图12: 选择一行后显示产品的详细信息总结在本篇和前面的三篇教程中我们看到了显示主/从报表的几种技巧. 在这篇教程中我们研究了使用可选择行的GridView显示主记录以及DetailsView选中主记录的显示详细. 在前面的教程中我们看到了如何在一个页面使用DropDownLists 显示主记录而在另一个页面显示详细信息记录.对主/从的研究到本篇就结束了. 从下一篇开始我们将研究自定义格式化的GridView, DetailsView及FormView. 我们将会看到如何自定义这些数据绑定控件, 如何在GridView 的页脚显示概括信息, 以及如何使用模板更好控制布局.11。

datagridview控件用法

datagridview控件用法

datagridview控件用法DataGridView控件是Windows Forms中最常用的控件之一,它可以用于显示和编辑数据。

在本文中,我们将介绍DataGridView控件的用法,包括如何绑定数据、设置列、样式和事件处理等。

1. 绑定数据DataGridView控件可以绑定各种数据源,包括DataTable、DataSet、BindingSource等。

绑定数据的方法有两种:一种是在设计时通过属性窗口设置,另一种是在运行时通过代码设置。

在设计时,我们可以通过以下步骤绑定数据:1)将DataGridView控件拖放到窗体上;2)在属性窗口中选择DataSource属性,然后选择要绑定的数据源;3)选择DataMember属性,然后选择要显示的数据表或数据集。

在运行时,我们可以通过以下代码绑定数据:dataGridView1.DataSource = dataTable;其中,dataTable是一个DataTable对象,它包含要显示的数据。

2. 设置列DataGridView控件可以显示多列数据,我们可以通过以下方法设置列:1)在设计时,通过列编辑器添加列;2)在运行时,通过代码添加列。

在设计时,我们可以通过以下步骤添加列:1)在属性窗口中选择Columns属性,然后点击“…”按钮;2)在列编辑器中添加列,设置列的属性,如HeaderText、DataPropertyName、Width等。

在运行时,我们可以通过以下代码添加列:DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();column.HeaderText = "Column1";column.DataPropertyName = "Column1";column.Width = 100;dataGridView1.Columns.Add(column);其中,DataGridViewTextBoxColumn是一个列类型,它表示文本列。

DetailsView的使用

DetailsView的使用

DetailsView的使用今天来说说D et ai lsV iew控件。

A、注意:凡是后缀名称为v iew的控件都支持双向绑定。

B、Det ai ls View控件显示数据的原理:和Gr id Vie w一样也是一个一个cel l,但是一个页面只显示数据库中的一条数据。

C、把Det ail sVi ew控件拖到界面上来,看看它的模样,和我们以前的控件有些差异,把控件右上角的三角形点击开,启用分页,这时候数据就全部显示出来了,只不过是一条数据一个页面显示罢了。

它的左边是字段名称,右边显示的是具体的数据字段,左边的宽度和右边的宽度在默认不改变的情况下是呈现一个黄金分割点的比例。

D、对Det ail sVi ew的外观进行具体的调整:具体的属性有很多,例如显示头部信息的属性:H ea der St yle控制头部显示效果的、Fi el dH ead er Sty le控制字段的名称的显示效果的,Ed it Row St yle编辑项显示效果,R ow Sty le奇数行数据的显示效果,A lt ern at in gRo wS tyl e偶数行数据的显示效果,E mp tyD at aR owS ty le空项数据模板的显示效果(数据什么时候都查不出来的情况下显示),这些都非常重要。

E、对某列数据进行控制。

把某一列打成模板列,这和G rid Vie w控件一样。

Ed itF ile ds(编辑字段),和Gri dVi ew 控件的编辑列一样。

可以对每一列的样式进行控制显示了。

例如还记得我们以前提到的日期的显示:{0:y yyy年M M月dd日}F、一个重要的事件:D a taB ou nd,这个事件和我们G rid View中的R o wDa ta Bo un d事件是一个思想下的,它们两个事件所取到的数据是一样的。

只不过没有那两大判断了,一是判断数据行,二是判断行状态。

在这里D ata Bou nd事件里面只需要判断当前D eta ils Vie w的显示状态,它有三种状态:E di t编辑状态、In se rt添加状态、R ea dOn ly只读状态。

用嵌套的DataGrid控件实现主、从表数据的显示

用嵌套的DataGrid控件实现主、从表数据的显示

(. enUn esyo hn , n do2 60 , ia 2Qiga i ot r C . t.Qiga 6 1 1 C ia 1 Oca i rt f ia Qiga 60 3 Chn; . n doHa r f e o Ld, n do2 6 0 , hn) v i C e S wa
维普资讯
ห้องสมุดไป่ตู้

开 发 研 究 与 设 计 技 术 ・ 。 ・
本 目 任 辑 谢 媛 栏 责 编 : 媛
用嵌套 的 D t Gr aa i d控件 实现 主 、 从表数据 的显示
吴宏 选 ’ 0
(. 国海 洋 大 学 , 东 青 岛 2 6 0 ;. 岛海 尔软 件 有 限 公 司 , 东 青 岛 2 60 ) 1中 山 60 3 2青 山 6 11
A src : e n n i l ig d t f m a n— h dt l a f n ue ba pi t n T eea n lt n o t t h b t t Qu Ⅳi a dds a n a o p r t c i be r ot sd i we p l a o . h r r ma ys u o s o c ne s a g py ar e l a e e n ci e o i t nt i
r q i me t M o t fc e ae u e O z a e t c e e出i f n t n e ur e n. s o m r s a p g "O a h v h o i s u c o .On a e i u e O ds ly p r n b e d t a d ce o h r o h l 妇be . i e p g s s d t i a ae tt l aa n h t e rc i p a f d ls Two p g o a e c mmu i ain wi o l k Th o g t d n Daa i nr l Th a e l s ae o t s s d Daa i O ds ly d t nct t h tn . o h i r u h s y i tGr Co to , u d ep p riu t tsh w O u e Ne t tGr t i a aa l r e d p

datagridviewdatasource使用方法

datagridviewdatasource使用方法

datagridviewdatasource使用方法一、设置DataGridView数据源DataGridView的数据源可以是任何实现了IEnumerable接口的数据集合。

常见的数据源包括DataTable、BindingSource、List等。

1. 使用DataTable作为数据源```// 创建一个DataTable对象DataTable dt = new DataTable(;//添加列dt.Columns.Add("ID", typeof(int));dt.Columns.Add("Name", typeof(string));dt.Columns.Add("Age", typeof(int));//添加行dt.Rows.Add(1, "Tom", 18);dt.Rows.Add(2, "Jerry", 20);dt.Rows.Add(3, "Alice", 22);// 设置DataGridView的数据源为DataTabledataGridView1.DataSource = dt;```2. 使用BindingSource作为数据源BindingSource是与数据绑定相关的类,它可以用于管理数据源和数据绑定控件之间的关系。

以下是使用BindingSource作为DataGridView 数据源的示例代码:```// 创建一个BindingSource对象BindingSource bs = new BindingSource(;// 设置BindingSource的数据源为数据集合bs.DataSource = dataList; // dataList为一个实现了IEnumerable接口的数据集合// 设置DataGridView的数据源为BindingSourcedataGridView1.DataSource = bs;```3. 使用List作为数据源```// 创建一个List对象List<Student> studentList = new List<Student>(;// 添加对象到List中studentList.Add(new Student( { ID = 1, Name = "Tom", Age = 18 });studentList.Add(new Student( { ID = 2, Name = "Jerry", Age = 20 });studentList.Add(new Student( { ID = 3, Name = "Alice", Age = 22 });// 设置DataGridView的数据源为ListdataGridView1.DataSource = studentList;```二、绑定列与数据源字段DataGridView控件会根据数据源的类型自动创建对应的列,但也可以手动定义列并绑定到数据源的字段。

在ASP.NET中利用DetailsView控件实现数据的综合处理

在ASP.NET中利用DetailsView控件实现数据的综合处理
先 把 相 应 字 段转 换 为模 板 列 ,然 后 在 相 应 字 段 的编 辑 模 板 ( E d i t h e m T e m p l a t e ) 中找 到 对 应 的 控 件 ( 如 T e x t B o x ) ,在 该 控
2 基 础 知 识 与 技 巧
2 . 1 自定义 字段
符 .这 时 就 不 能 再追 加数 据 了 ,所 以 要 求 数 据 显 示 在 控 件 中 以
于数 据 的呈 现 、修 改 、更 新 、删 除 等操 作 。 在 此 以 具 体 实 例 来
讲解 D e t a i l s V i e w控 件 的 相 关 功 能 的 实现 。
前 就 把 多余 的 空 格取 掉 ,方 法 如下 :
A u t o G e n e r a t e R o w s 属 性 的值设 置 为 F a l s e ,然后 在 D e t a i l s V i e w
数 据 源 的单 条 数 据 记录 ,其 表 格 只 包 含 两 个 数 据 列 。一 个 数 据 列显 示 数 据 列 名 .另 一 个 数 据 列 显 示 与 其 对 应 列 名 相 关 的详 细 数 据 值 。这 种 显 示 方 式 对 于数 据 列 较 多 ,需 要 逐 行 显 示 详 细 数 据 的 情 况 非 常 有 用 。D e t a i l s V i e w控 件 通 常 可 与 G r i d V i e w 控 件 结 合 使 用 . 以实 现 主 细 表 信 息 的呈 现 。
埘 辟掌 段 B 。 讯 , dd 鼹健 避 ,
先 把 相 应 字 段 转 换 为 模 板 列 , 然 后 在 相 应 字 段 模 板
( I t e m T e mp l a t e ) 中找 到对 应 的控 件 ( 如 L a b l e ), 在 该 控 件 的 D a t a B i n d i n g s 属 性 中选 择 “ 自定 义 绑 定 ” ,在 此 输 入 : ( e v a l( ”

在DataGrid和DataGridView中显示主从表的数据

在DataGrid和DataGridView中显示主从表的数据

在DataGrid和DataGridView中显⽰主从表的数据微软提供了DataGridView以替代DataGrid,但为了向下兼容,在新版的.net Framework中还是提供了DataGrid。

如果要在⼀个DataGrid中实现主从表的功能。

关键是创建DataSet中表之间的关系。

此⽰例在DataGrid和DataGridView控件分别实现中显⽰2个关联表的数据,NorthWind数据库中的Customers表和Orders表是⼀对多的关系,Customers表的主键CustomerID作为Orders表的外键。

如://创建表之间的关系。

DataRelation dataRelation;DataColumn dataColumn1, dataColumn2;dataColumn1 = myDs.Tables["Customers"].Columns["CustomerID"];dataColumn2 = myDs.Tables["Orders"].Columns["CustomerID"];dataRelation = new DataRelation("CustomersToOrders",dataColumn1,dataColumn2);//在DataSet中添加关系myDs.Relations.Add(dataRelation);然后,设置DataGrid的相关属性,显⽰数据://设置DataGridView的视图和DataMembers成员并显⽰数据DataViewManager DataSetView = myDs.DefaultViewManager;dataGrid1.DataSource = DataSetView;dataGrid1.DataMember = "Customers";运⾏结果如下图:全部代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;//此⽰例在DataGridView控件中显⽰2个关联表的数据。

微软提供的DataGridView主从表显示示例

微软提供的DataGridView主从表显示示例

微软提供的DataGridView主从表显⽰⽰例DataGridView 控制項建⽴主要/詳細表單更新:2007 年 11 ⽉使⽤控制項時,最常⾒的⼀種案例就是主要/詳細表單,這種表單可顯⽰出兩個資料庫資料表之間的⽗/⼦關聯。

在主要資料表中選取資料列,會使得詳細資料表更新其相對應的⼦系資料。

透過控制項和元件之間的互動,實作主要/詳細表單是⼀件很容易的事。

在本逐步解說中,您會使⽤兩個控制項和兩個元件來建⽴表單。

表單將顯⽰在 Northwind SQL Server 範例資料庫中兩個關聯資料表:Customers 和 Orders。

當您完成時將會擁有⼀個表單,其中資料庫的所有客⼾會顯⽰在主要的,⽽特定客⼾的所有訂單則會顯⽰在詳細的當中。

若要將此主題中的程式碼複製為⼀份清單,請參閱。

必要條件若要完成這個逐步解說,您必須要有:存取具有 Northwind SQL Server 範例資料庫的伺服器。

建⽴表單若要建⽴主要/詳細表單1. 建⽴⼀個由所衍⽣,⽽且包含兩個控制項和兩個元件的類別。

下列的程式碼提供基本的表單初始化,⽽且包含了⼀個 Main ⽅法。

如果您使⽤ Visual Studio 設計⼯具來建⽴表單,則可以⽤設計⼯具產⽣的程式碼來取代下列程式碼,不過請確認您使⽤了此處變數宣告中所顯⽰的名稱。

Visual BasicImports SystemImports System.DataImports System.Data.SqlClientImports System.Windows.FormsPublic Class Form1Inherits System.Windows.Forms.FormPrivate masterDataGridView As New DataGridView()Private masterBindingSource As New BindingSource()Private detailsDataGridView As New DataGridView()Private detailsBindingSource As New BindingSource()<STAThreadAttribute()> _Public Shared Sub Main()Application.Run(New Form1())End Sub' Initializes the form.Public Sub New()masterDataGridView.Dock = DockStyle.FilldetailsDataGridView.Dock = DockStyle.FillDim splitContainer1 As New SplitContainer()splitContainer1.Dock = DockStyle.FillsplitContainer1.Orientation = Orientation.HorizontalsplitContainer1.Panel1.Controls.Add(masterDataGridView)splitContainer1.Panel2.Controls.Add(detailsDataGridView)Me.Controls.Add(splitContainer1)Me.Text = "DataGridView master/detail demo"End Sub...End ClassC#using System;using System.Data;using System.Data.SqlClient;using System.Windows.Forms;public class Form1 : System.Windows.Forms.Form{private DataGridView masterDataGridView = new DataGridView();private BindingSource masterBindingSource = new BindingSource();private DataGridView detailsDataGridView = new DataGridView();private BindingSource detailsBindingSource = new BindingSource();[STAThreadAttribute()]public static void Main(){Application.Run(new Form1());}// Initializes the form.public Form1(){{masterDataGridView.Dock = DockStyle.Fill;detailsDataGridView.Dock = DockStyle.Fill;SplitContainer splitContainer1 = new SplitContainer();splitContainer1.Dock = DockStyle.Fill;splitContainer1.Orientation = Orientation.Horizontal;splitContainer1.Panel1.Controls.Add(masterDataGridView);splitContainer1.Panel2.Controls.Add(detailsDataGridView);this.Controls.Add(splitContainer1);this.Load += new System.EventHandler(Form1_Load);this.Text = "DataGridView master/detail demo";}...}2. 在表單的類別定義中實作⼀個⽅法,來處理與資料庫連接的細節。

用嵌套List实现DataGrid的主从表显示

用嵌套List实现DataGrid的主从表显示

⽤嵌套List实现DataGrid的主从表显⽰//⾸先构造嵌套List,也就是⼀个list在另⼀个list中充当成员//如:referModels 在res中充当成员var res = totalAffectedMedels.Select(c => new{TIME_SLICE_ID = c.curModel.TIME_SLICE_ID,referModels = c.referModels == null ? null : c.referModels.Select(n => new{数据类型 = n.TABLE_INFO,名称 = ,识别 = n.DESIGNATOR,数量 = n.mCount}).ToList(),任务操作 = c.operType == CmmDb.DbOperation.Add ? "添加" :"",数据类型 = c.curModel.TABLE_INFO,名称 = ,识别 = c.curModel.DESIGNATOR}).ToList();//确保GridControl的optionsDetail下的EnableMasterViewMode=true,该属性默认就是true//最简单的⽅法直接将此list绑定到gdc的DataSource就能⾃动出现主从界⾯,不⽤在界⾯上做任何设置,如//要显⽰隐藏哪些列完全通过上⾯的⾃定义List实现//⼦表的标签会⾃动为referModelsCmmFrm.BestFitGridViewListWidth(gdc_TaskCancel, res, 1);//如果要仅有个别列要隐藏,添加绑定事件MasterRowExpanded,在点击⾏头的+时触发private void gdv_TaskCancel_MasterRowExpanded(object sender, DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs e) {GridView gridViewMaster = sender as GridView;GridView gridViewDetail = gridViewMaster.GetDetailView(e.RowHandle, e.RelationIndex) as GridView;if (gridViewDetail.IsNotNull()){gridViewDetail.BeginUpdate();gridViewDetail.Columns["TIME_SLICE_ID"].Visible = false;gridViewDetail.Columns["TIME_SLICE_ID"].OptionsColumn.ShowInCustomizationForm = false;gridViewDetail.EndUpdate();}}//⼀般的做法是在gdv中添加Level视图,点击右键修改视图名称为⼦List名称,referModels,可绑定⼦表。

GridView与DetailsView的联合使用

GridView与DetailsView的联合使用

GridView与DetailsView的联合使用GridView和DetailsView的用法与1.x中有很大的不同,主要是2.0新增了4个DataSource控件。

其中有3个直接或间接继承自System.Web.UI.DataSourceControl另一个(SiteMapDataSource)继承自System.Web.UI.HierarchicalDataSourceControl。

在实际应用中,用的较多的是ObjectDataSource。

ObjectDataSource控件支持Web开发的三层架构,把表示层和数据层真正分开了。

ObjectDataSource允许指定一个类给它的TypeName属性。

同时指定这个类的一个公共方法给它的SelectMethod属性。

这可以是一个中间层的类,在这个类中可以调用数据层的方法也可以与数据层完全无关。

与ObjectDataSource相连的GridView或DetailsView则只负责显示,而与数据逻辑无关。

要在GridView中显示数据只要把一个ObjectDataSource的ID赋给GridView的DataSourceID属性(实际上GridView中绑定的数据源只需要实现IEnumerable 或 ItypedList接口即可)。

在GridView的Smart Tag中有Choose Data Source的选项,可以选取页面中已存在的DataSource。

选定DataSource后可以点击Configure Data Source,会出现下面的界面其中可以选择一个类,这个类的类名将会作为ObjectDataSource的TypeName属性。

然后Next下去…这可以选择select、update、insert和delete分别对应的方法。

但可以不选。

一个ObjectDataSource 的select方法是必须要有的,如果没有在这个界面中选择的话,可以在Page_Load方法中根据需要指定,例如(这个小示例与下面的例子无关):[复制到剪贴板] CODE:void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack){if (er.IsInRole("Administrator")){ObjectDataSource1.SortParameterName = "sortParameter";ObjectDataSource1.SelectMethod = "GetStudents";}else{ObjectDataSource1.SelectParameters.Add(new Parameter("Name", TypeCode.Int32, ));ObjectDataSource1.SortParameterName = "sortParameter";ObjectDataSource1.SelectMethod = "SelectStudent";}}}对于GridView的数据显示,一个常见的问题是:它根据什么生成行,又根据什么生成列呢?GridView 需要的数据源只需实现IEnumerable 或ItypedList接口。

GridView、DetailsView 显示控件增删改

GridView、DetailsView 显示控件增删改

使用GridView、DetailsView 服务器控件在网页上编辑和插入数据通过使用封装数据访问的数据源控件与以可编辑格式显示记录的DetailsView 和GridView 控件的组合,可以创建一个允许用户编辑现有记录或插入新记录的数据输入页,所有操作均无需代码。

1、创建网站和网页创建解决方案文件夹和一个名为Default.aspx 的新页。

2、配置SqlDataSource连接到SQL Server拖一SqlDataSource控件至页面中,然后,并单击“显示智能标记”。

出现“数据源配置向导”对话框。

在“选择数据源类型”下单击“数据库”。

保留默认名称“SqlDataSource1”,然后单击“确定”。

“配置数据源”向导显示“选择连接”页。

在“应用程序连接数据库应使用哪个数据连接?”框中输入在“创建与SQL Server 的连接”中创建的连接,然后单击“下一步”。

该向导显示一页,从该页中您可以选择将连接字符串存储到配置文件中。

将连接字符串存储在配置文件中有两个优点:(1)比将它存储在页面中更安全。

(2)可以在多个页面中使用相同的连接字符串。

选择“是,将此连接另存为”复选框,然后单击“下一步”。

该向导显示一页,从该页中您可以指定要从数据库中检索的数据。

在“配置Select 语句”页上选择“指定来自表或视图的列”,然后在“名称”框中单击“雇员”。

在“列”下,选中“EmployeeID”、“Lastname”、“Firstname”和“HireDate”复选框,然后在“配置Select 语句”页上单击“高级”,选中“生成INSERT、UPDATE 和DELETE 语句”复选框,然后单击“确定”。

注意可以通过选择“指定自定义SQL 语句或存储过程”并输入SQL 查询来手动创建语句。

您可以选择SqlDataSource 控件并查看DeleteQuery、InsertQuery 和UpdateQuery 属性,以便检查由向导生成的语句。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

导言在前面的教程我们看到了如何使用两个页面(一个主页,用于列出供应商; 一个明细页,用于显示选定供应商提供的产品)创建主/从报表 . 这种两个页面的报表格式也可以集中在一个页面上. 这篇教程将会使用一个GridView, 它的每一行都包含产品的名称和单价以及一个选择按钮. 单击一个产品的选择按钮会在同一页的DetailsView控件上显示该产品的全部详细信息.图1: 单击选择按钮显示产品明细Step 1: 创建一个可选择行的GridView回想一下前面的跨页的主/从报表, 它的每个主记录包含了一个超链接, 当点击该链接时转到详细信息页,并在查询字符串中传递所单击行的SupplierID值. 这个链接是通过在GridView上使用HyperLinkField实现的. 对于单页的主/从报表,每个GridView行需要一个按钮, 单击该按钮时显示详细信息. GridView控件可以在每行包含一个选择按钮, 单击该按钮时会引起一次回发并把该行做为GridView的SelectedRow值.先给Filtering 文件夹下的DetailsBySelecting.aspx页添加一个GridView控件, 设置ID属性为ProductsGrid, 然后增加一个新的ObjectDataSource并命名为AllProductsDataSource, 它调用ProductsBLL类的GetProducts()方法图2: 创建一个ObjectDataSource 并命名为AllProductsDataSource图3: 使用ProductsBLL 类图4: 配置ObjectDataSource 调用GetProducts() 方法编辑GridView的字段, 移除ProductName和UnitPrice以外的字段. 也可以根据需要自定义绑定字段,比如格式化utitPrice字段为货币,修改绑定字段的HeaderText属性. 这些操作可以在设计视图完成, 单击GridView智能标记上的编辑列, 或是手工配置声明的语法.图5: 移除ProductName 和UnitPrice 以外的列.最后的GridView标记如下:<asp:GridView ID="ProductsGrid" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID"DataSourceID="AllProductsDataSource" EnableViewState="False"><Columns><asp:BoundField DataField="ProductName" HeaderText="Product"SortExpression="ProductName" /><asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}" HeaderText="Unit Price"HtmlEncode="False" SortExpression="UnitPrice" /></Columns></asp:GridView>接下来, 我们需要设置GridView为可以选择行, 这会为每一行增加一个选择按钮. 要实现该功能, 只要选中GridView智能标记上的”启用选定内容”的复选框就可以了.图6: 让GridView 的行可选选中”启用选定内容”项会给ProductsGrid GridView增加一个命令字段并设置ShowSelectButton属性为True.这样GridView的每一行都会有一个选择按钮, 如图6所示. 默认情况下, 选择按钮以链接的形式呈现, 但是你也可以使用按钮或图片按钮来代替, 修改CommandField的ButtonType属性即可.<asp:GridView ID="ProductsGrid" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID"DataSourceID="AllProductsDataSource" EnableViewState="False"><Columns><asp:CommandField ShowSelectButton="True" /><asp:BoundField DataField="ProductName" HeaderText="Product"SortExpression="ProductName" /><asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}" HeaderText="Unit Price"HtmlEncode="False" SortExpression="UnitPrice" /></Columns></asp:GridView>单击GridView的选择按钮时会引起一次回发, GridView的SelectedRow属性也会更新. 除了SelectedRow属性, GridView还提供了SelectedIndex, SelectedValue, 和SelectedDataKey属性. SelectedIndex属性返回选中行的索引, SelectedValue和SelectedDataKey属性返回基于GridView的DataKeyNames属性的值.DataKeyNames属性让每一行关联一个或多个数据字段, 经常用于唯一标识GridView行. SelectedValue属性返回选中行的DataKeyNames中的第一个数据字段的值, SelectedDataKey返回选中行的DataKey对象, 它包含了该行的所有指定数据主键字段的值.在设计视图上绑定数据源到GridView, DetailsView, FormView时DataKeyNames属性被自动设置为数据源中唯一标识的数据字段. 尽管在前面的教程中这个属性都是自动设置的,示例可以不需要专门指定的DataKeyNames属性就可以运行. 但对于本教程中的可选择行的GridView以及后面我们要研究GridView中的新增,更新,删除的教程中, DataKeyNames 属性必须合理地设置.确保GridView的DataKeyNames属性已经设置为ProductID.在浏览器浏览一下我们所完成的工作. GridView列出了所有产品的名称和单价以及一个选择按钮. 单击选择按钮触发一次回发. 在第二步中我们将会看到如何让一个DetailsView响应该回发事件并显示选中产品的详细信息.图7: 每个产品行都包含一个选择链接按钮.高亮显示选中行ProductsGrid GridView 有一个SelectedRowStyle属性, 该属性决定了选中行的外观. 合理的使用可以更清晰的显示当前选中的行以改善用户体验. 对于本教程, 我们使用黄色的背景来高亮显示选中行.与前面的教程一样, 我们要尽量保持美的外观.在Styles.css中定义一个新的CSS类并命名为SelectedRowStyle..SelectedRowStyle{background-color: Yellow;}要对本系列教程中的所有GridView的SelectedRowStyle属性应用这个CSS类,编辑DataWebControls 主题下的GridView.skin外观文件如下:<asp:GridView runat="server" CssClass="DataWebControlStyle"><AlternatingRowStyle CssClass="AlternatingRowStyle" /><RowStyle CssClass="RowStyle" /><HeaderStyle CssClass="HeaderStyle" /><SelectedRowStyle CssClass="SelectedRowStyle" /></asp:GridView>修改后,GridView的选中行用黄色的背景高亮显示图8:使用GridView的SelectedRowStyle 属性自定义选中行的外观Step 2: 在DetailsView中显示选中产品的详细信息完成ProductsGrid GridView后, 剩下就是增加一个DetailsView, 它显示选中的产品的详细信息. 在GridView的上方添加一个DetailsView控件并创建一个新的数据源命名为ProductDetailsDataSource. 由于我们想让这个DetailsView显示选中产品的详细信息, 配置ProductDetailsDataSource使用ProductsBLL类的GetProductByProductID(productID)方法.图9: 调用ProductsBLL 类的GetProductByProductID(productID) 方法让productID从GridView控件的SelectedValue属性获取参数值.如同我们前面讨论过的, GridView的SelectedValue属性返回选中行的第一个数据键值. 因此必须把GridView的DataKeyNames属性设置为ProductID, 这样选中行的ProductID就可以通过SelectedValue属性返回了.图10: 把productID 参数关联到GridView的SelectedValue 属性.配置好productDetailsDataSource ObjectDataSource并把它绑定到DetailsView后, 这篇教程就算完成了! 第一次访问时没有行被选中, 所以GridView的SelectedValue属性返回null. 由于没有ProductID值为Null的产品, GetProductByProductID(productID)方法不返回任何记录, DetailsView也就无法显示(如图11). 单击GridView的选择按钮后会引起一次回发并更新DetailsView. GridView的SelectedValue属性返回选中行的ProductID, GetProductByProductID(productID)方法返回特定产品的信息ProductsDataTable, DetailsView显示这些详细信息(如图12).图11: 第一次访问时只显示GridView图12: 选择一行后显示产品的详细信息总结在本篇和前面的三篇教程中我们看到了显示主/从报表的几种技巧. 在这篇教程中我们研究了使用可选择行的GridView显示主记录以及DetailsView选中主记录的显示详细. 在前面的教程中我们看到了如何在一个页面使用DropDownLists 显示主记录而在另一个页面显示详细信息记录.对主/从的研究到本篇就结束了. 从下一篇开始我们将研究自定义格式化的GridView, DetailsView及FormView. 我们将会看到如何自定义这些数据绑定控件, 如何在GridView 的页脚显示概括信息, 以及如何使用模板更好控制布局.11。

相关文档
最新文档