×

datagrid控件 排序 控件

datagrid控件(如何对 DataGrid 控件中的数据进行分组,排序和筛选)

admin admin 发表于2023-09-20 10:39:06 浏览40 评论0

抢沙发发表评论

本文目录

如何对 DataGrid 控件中的数据进行分组,排序和筛选

  • 实现DataGrid控件的分组:

    默认情况下,可以通过设置C1DataGrid.CanUserGroup属性为True,实现分组以及分组区域的显示。分组区域是否显示是通过ShowGroupingPanel来实现,默认是不显示的,设置为True,就会显示出来。

  • 实现DataGrid控件的筛选:

    C1DataGrid支持各种类型的过滤。通过DataGridFilterList类就能实现。

具体的代码实现,请参考下面的博客

如何使用DataGrid控件

〔DataGrid控件〕 在三种控件当中,DataGrid是迄今为止功能最为丰富的,但也是最不灵活的控件。这种在输出HTML时不够灵活的特点是因为它最初就是被设计成以表格的形式输出数据。每一条记录输出时会建立一对《tr》标签,而每个字段的值输出时则建立一对《td》标签。 DataGrid含有几个属性可以提高其可用性。如,通过设置DataGrid的AllowSorting属性为true,并加入少量代码,DataGrid就具备了按不同字段排序的功能。此外,设定相关属性来实现分页以及单条记录的功能更加增强了DataGrid的可用性。 除了在可用性方面的支持以外,DataGrid同时也相当节省开发时间。使用DataGrid在WEB页面上显示数据只需要两行代码。一行用来设定与DataGrid绑定的数据源(DataSource),另一条则用来执行绑定命令(DataBind())。当然,在Repeater中实现这样的功能并非不可能,只是,相比较使用DataGrid而言,你需要花费相当多的时间和精力来实现这些功能。 尽管DataGrid有这样那样令人印象深刻的优点,它的两个缺点也同样不能忽视。首先,如前所述,DataGrid在个性化输出数据方面功能有限。当然,你可以定制字体、颜色以及线条宽度等等,但它始终只能是HTML表格。 每个在DataGrid中的列都是DataGridColumn类的一个实例。有五种DataGrid列的形式: ·BoundColumn ·ButtonColumn ·EditColumn ·HyperLinkColumn ·TemplateColumn 每种类型都会以一种方式允许页面访问与DataGrid进行交互。例如,BoundColumn将DataSource的字段值显示为纯文本;而HyperLinkColumn则将之显示为一个超级链接。另外,开发者可以通过写一个继承自DataGridColumn的自定义类来定制DataGrid列的样式。 尽管DataGrid具有这么多的增强可用性的属性,却仍然显得死板而不够灵活。这是因为,不论什么样的属性,都需要对DataGrid所生成的表格进行相关的设置而生效。这无疑会使表格变得臃肿而失去灵活性。例如,DataGridColumn的设置会对表格的每一行的相应列生效。DataGrid的这种局限性阻碍了更有创意地显示数据。比如,你希望每五条记录被显示在一行,或根本不想要表格来显示数据,你将不得不放弃使用DataGrid。 DataGrid的第二个缺陷是它的性能。在三种数据控件中,DataGrid是相对性能最差的。由DataGrid所生成的ViewState将会相当庞大,特别是在DataGrid含有较多的行时。当然,你也可以关闭ViewState功能,但代价是你将不能使用排序、分页以及记录等功能。 为了测量DataGrid的性能,我使用了微软的Web Application Stress Tool (WAST)。精确的测试条件设定以及测试用代码将会在本文的结尾给出。 WAST将会对WEB服务器发出对一个特定URL的请求。每个测试将会针对一个URL在一分钟之内连续不断地请求。WAST将会一个代表性能的数值,代表WEB服务器将会在一秒钟内执行ASP.Net页面多少次。 两个测试将显示一个仅仅显示数据的DataGrid。DataGrid将会显示Northwinds数据库中的Customers表的4个字段的内容(总计91条记录)。DataGrid的AutoGenerateColumns属性将会被设为True。第一个测试将DataGrid置于一个Form中,第二个则不置于Form中。将控件置于Form中而不指定其EnableViewState为False,则控件将会一直使用ViewState来维持其状态。对ViewState的设定是为了有一个耗时的处理过程,来看一下它对于每秒种的页面请求有什么样的影响。测试结果见图1。 图1:对DataGrid的每秒请求次数 在下面我们要讨论并测试的DataList和Repeater中,我们会看到它们的性能将优于DataGrid。 〔DataList控件〕 如前所述,DataGrid使用表格来显示数据。你也许需要更进一步地控制数据的显示。例如,你想使数据在表格中显示,但不是每行只有一条记录,而是多条。又或者,你并不想使用表格来显示数据,而是只将它们显示在一系列《span》标签中。 DataList放弃了DataGrid中列表显示数据的概念,而是使用事先定义好的模板(Template)来定制显示。通过使用模板,可以同时使用HTML标签或数据绑定。这里的数据绑定的形式为:《%# … %》,用来显示数据源中给定条目的数据记录。如下的ItemTemplate将会显示数据源中CompanyName字段: 《asp:DataList runat=“server“ id=“myDataList“》 《ItemTemplate》 《%# DataBinder.Eval(Container.DataItem, “CompanyName“) %》 《/ItemTemplate》 《/asp:DataList》 通过修改上面的模板,我们可以使CompanyName字段显示为粗体字,而ContactName字段则以正常式样显示在CompanyName之下。 《asp:DataList runat=“server“ id=“myDataList“》 《ItemTemplate》 《b》《%# DataBinder.Eval(Container.DataItem, “CompanyName“) %》《/b》 《br /》 《%# DataBinder.Eval(Container.DataItem, “ContactName“) %》 《/ItemTemplate》 《/asp:DataList》 对于DataList数据源中的每一条记录,ItemTemplate会通过定义HTML标签来以相同的样式显示数据。ItemTemplate还支持其它其它6种模板: ·AlternatingItemTemplate ·EditItemTemplate ·FooterTemplate ·HeaderTemplate ·ItemTemplate ·SelectedItemTemplate ·SeparatorTemplate 默认情况下DataList会将记录显示在HTML表格中。然而,通过设定RepeatColumn属性,你可以设置在一行中显示多少条记录。更进一步,你甚至可以指定DatList的内容不显示在表格中,而是《span》标签中。这可以通过设定RepearLayout属性来实现。 通过模板、RepeatColumn和RepeatLayout属性,很明显DataList在定制数据输出样式方面较DataGrid更具灵活性,使得用户界面设计可以更加友好。当然,我们还需要进行功能性的对比,如分页、排序、记录等等。 通过EditItemIndex模板和EditCommand,UpdateCommand以及CancelCommand事件,DataList将支持记录的功能。不过,比较DataGrid而言,这需要耗费更多的开发时间来实现。这种开发时间上的不一致主要有两个原因: ·/更新/删除按钮在DataGrid中可以通过设定EditCommandColumn来自动添加;而在DataList中则需要手动添加。 ·DataGrid的BoundColumn列样式自动使用文本框控件来显示记录界面。而在DataList中,你必须通过EditItemTemplate明确地指定使用什么样的界面。 实现DataList中的分页、排序功能同记录功能情况一样,并不算非常复杂。这些功能可以通过巧妙的编程加以实现,只是耗费一些开发时间。所以,如果需要用户对数据记录进行排序或的话,使用DataGrid要比使用DataList方便得多。 DataList的性能要比DataGrid好一些,特别是当DataList被包含在Form当中时。图2显示了WAST对DataList的测试。 图2:对DataList的每秒请求次数 可以看出,在被Web Form包含的情况下,DataList的性能要明显好于DataGrid。 〔Repeater控件〕 Repeater控件是三种数据控件中在HTML输出方面最为灵活的控件。Repeater会按照你所要求的样式严格地输出数据记录。所以,如果你不想以表格方式或者简单的《span》输出数据,那么最好使用Repeater。 与DataList一样,Repeater使用模板来指定输出样式。Repeater支持如下五种模板: ·AlternatingItemTemplate ·FooterTemplate ·HeaderTemplate ·ItemTemplate ·SeparatorTemplate HederTemplate和FooterTemplate指定在真正的记录输出之前或之后应处理的HTML内容。AlternatingItemTemplate和ItemTemplate则指定实际的每条输出记录的HTML样式。如,你需要绑定一个包含雇员信息的DataSet到一个Repeater,字段名为EmployeeName。如果你想在页面中不排序地显示这些记录,你可以使用如下的语句: 《asp:Repeater runat=“server“ id=“rptEmployees“》 《HeaderTemplate》 《ul》 《/HeaderTemplate》 《ItemTemplate》 《li》《%# DataBinder.Eval(Container.DataItem, “EmployeeName“) %》《/li》 《/ItemTemplate》 《FooterTemplate》 《/ul》 《/FooterTemplate》 《/asp:Repeater》 Repeater类不是继承自WebControl类的,这一点与DataGrid和DataList不同。所以,Repeater没有样式方面的属性可供设定。也就是说,如果你想格式化输出Repeater的数据记录,你必须使用HTML标签来设定样式。如,在一例中,如果我们想将雇员名字显示成粗体,我们必须在ItemTemplate设置相应的HTML标签: 《ItemTemplate》 《li》《b》《%# DataBinder.Eval(Container.DataItem, “EmployeeName“)%》《/b》《/li》 《/ItemTemplate》 而如果使用DataGrid或DataList,我们只通过设定ItemStyle-Font-Bold属性为True即可实现。 Repeater在格式化设定上的欠缺,直接反映到开发时间的延长上来。对输出数据样式上的越多要求,就越会导致开发周期的延长。这些在模板中规定样式的HTML标签也越发得显得混乱,而且,在将来页面更改时会更加困难,特别是当一个新的开发人员接替工作时。而使用DataGrid或DataList你尽可以只设定样式属性,而不使用模板。而且,如果使用Visual Studio.Net或ASP.Net Web Matrix工作时,这些属性更可以被直接设定而无需编码。 因为Repeater开发时间的延长,其在内建功能(分页、排序及)上的支持也显得不足。因此在可用性方面,Repeater有着明显的缺陷。当然,《b》如果《/b》用户对于如何显示数据无所谓的话,这也算不了什么大问题。我之所以强调这个“如果”,是因为尽管用户有时在设计时并不要求能够分页、排序或记录,但这样的要求往往会在开发后期,或在他们能看到显示出来的记录后产生。 Repeater唯一优于DataGrid和DataList的特点是它的性能,尤其明显优于DataGrid。而比DataList略高一点点。 〔结论〕 在ASP.Net页面上显示数据时,多数的程序员会选择他们所熟悉的控件来使用,特别是DataGrid。然而,这样盲目的选择在没有“最好的通用控件”的情况下是不明智的。在选择控件来显示数据前,不妨问自己几个问题来帮助决策:是否允许用户对记录排序?是不是记录需要显示在非表格的情况下?页面是否会被高频度地访问,因此应多考虑性能? DataGrid提供了最多的功能,如允许访问者对记录、排序或分页。同时它也是最容易使用的,甚至于简单到只需要将之添加到页面中而不必额外编写代码。不过这些易用性是以性能的损失为代价的。DataGrid在三种控件中是效率最低的,特别是在使用Web Form的情况下。 通过使用模板,DataList提供了比DataGrid更加优秀的界面效果。不过这需要以牺牲一定的开发时间为代价。为了添加排序、分页和功能,程序员不得不花费比使用DataGrid更多的精力来进行编码,虽然它的性能要优于DataGrid。 最后,Repeater允许对数据记录作最大限度的HTML定制。通常,使用Repeater来显示数据记录比使用DataGrid和DataList要耗费更长的开发时间。另外,它不支持内建的、排序和分页功能。所幸的是,Repeater在性能上要优于其它两种控件,特别是明显优于DataGrid。

DataGrid控件的简介

DataGrid 控件的每一个单元格都可以包含文本值,但不能链接或内嵌对象。可以在代码中指定当前单元格,或者用户可以使用鼠标或箭头键在运行时改变它。通过在单元格中键入或编程的方式,单元格可以交互地。单元格能够被单独地选定或按照行来选定。如果一个单元格的文本太长,以致于不能在单元格中全部显示,则文本将在同一单元格内折行到下一行。要显示折行的文本,必须增加单元格的Column对象的Width属性和/或DataGrid控件的RowHeight属性。在设计时,可以通过调节列来交互地改变列宽度,或在Column对象的属性页中改变列宽度。使用DataGrid控件的Columns集合的Count属性和Recordset对象的RecordCount属性,可以决定控件中行和列的数目。DataGrid控件的可包含的行数取决于系统的资源,而列数最多可达32,767列。选择一个单元格,则ColIndex属性被设置,也就是选择了DataGrid对象的Columns集合中的一个Column对象。Column对象的Text和Value属性引用当前单元格的内容。使用Bookmark属性能够访问当前行的数据,它能够提供对下一级Recordset对象中记录的访问。DataGrid控件中的每一列都有自己的字体、边框、自动换行和另外一些与其他列无关的能够被设置的属性。在设计时,您可以设置列宽和行高,并且建立对用户不可见的列。您还能阻止用户在运行时改变格式。.NET 3.0 为我们提供了DataGridView控件使我们可以显示表格数据,相比.NET 2.0 之前的DataGrid控件,DataGridView控件提供了更强大更灵活的以表格形式显示数据的功能。

在VB里怎么添加DataGrid控件

1. 为需要访问的数据库创建一个 Microsoft 数据链接 (.MDL) 文件。

2. 在窗体上放置一个 ADO Data 控件,并将其 ConnectionString 属性设置为在第1步中所创建的OLE DB 数据源。

3. 在这个 Ado Data 控件的 RecordSource 属性中输入一条将返回一个记录集的 SQL 语句。例如,Select * From MyTableName Where CustID = 12

4. 在窗体上放置一个 DataGrid 控件,将其DataSource属性设置为这个ADOData控件。

5. 右键单击该 DataGrid 控件,然后单击“检索字段”。

6. 右键单击该 DataGrid 控件,然后单击“”。

7. 重新设置该网格的大小、删除或添加网格的列。

8. 右键单击该 DataGrid 控件,然后单击“属性”。

9. 使用“属性页”对话框来设置该控件的适当的属性,将该网格配置为所需的外观和行为。

如何在DataGrid控件中实现编辑,删除,分类

一、DataGrid控件用来显示若干行数据信息,通常这些信息是从数据库中读取出来的。对DataGrid控件的每一行都可以进行,删除,查看等等操作,操作实际是对数据库的更新。这里需要搞清楚:1.如何获得所操作行的每一个列的具体内容;2. 针对哈飞的项目,如何进行删除操作;具体代码:………… private void MyDataGrid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){if(e.CommandName == “ToDelete“){/*获取DataGrid列表中所选定行的各个列的文本信息,由于每一行前面有“”和“更新”两个按钮,占用了Cell和Cell,因此,数据信息从Cell开始,有几列就以此类推*///获取信息列各个单元格信息string deleteTitle = e.Item.Cells.Text.ToString();string deletePerson = e.Item.Cells.Text.ToString();string deleteDate = e.Item.Cells.Text.ToString();string deleteContent = e.Item.Cells.Text.ToString();//书写squery语句,格式要根据PL/SQL中package bodies中定义的格式书写string sQuery = “call Prc_Hfnews.P_MODIFY(’D’,’“+deleteTitle+“’,’“+deletePerson+“’,’“+deleteDate+“’,’“+deleteContent+“’,’“+NewsType+“’,:arg_e_code,:arg_e_msg)“;string ret_str = GeneralCommon.GF_Ms_ExecSql (sQuery);if (ret_str== “OK“)//删除成功{Response.Write(“《script language=javascript》alert(’OK!成功删除!’)《/script》“);}else //删除失败{Response.Write(“《script language=javascript》alert(’Sorry!删除失败!’)《/script》“);}}

如何在DataGrid控件中实现自定义分页

在一般情况下,DataGrid控件每次实现翻页操作时,都会将数据源中的数据重新调用一次,当数据中数据很多时,这样做就会很浪费系统资源和降低程序的执行效率.这时候我们一般通过自定义分页来解决这个问题. DataGrid控件的AllowCustomPaging属性用来获取或设置DataGrid控件是否允许自定义分 页;VirtualItemCoun属性用来获取或设置在使用自定义分页时DataGrid中实际的项数.要实现自定义分 页,必须将AllowPaging与AllowCustomPaging属性都设置为“True“. 在DataGrid中要实现自定义分页的关键是,使该控件仅仅调用当前显示所需要的数据源数据,在下面的例子中通过CurrentPageIndex和PageSize属性的值,在数据绑定时只取当前页需要的数据. (1)页面代码: 复制代码 代码如下:《%@ Page language=“c#“ Codebehind=“Main.aspx.cs“ AutoEventWireup=“false“ Inherits=“SissonDemo.Main“ %》 《!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN“ 》 《HTML》 《HEAD》 《title》Main《/title》 《meta name=“GENERATOR“ Content=“Microsoft Visual Studio .NET 7.1“》 《meta name=“CODE_LANGUAGE“ Content=“C#“》 《meta name=“vs_defaultClientScript“ content=“JavaScript“》 《meta name=“vs_targetSchema“ content=“ /// 《/summary》 private void InitializeComponent() { this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler (this.DataGrid1_PageIndexChanged); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) { //设置DataGrid当前页的索引值为用户选择的页的索引 DataGrid1.CurrentPageIndex=e.NewPageIndex; //取得当前页为止总共有多少条记录,以便在下一页就从该记录开始读取 startIndex=DataGrid1.PageSize*DataGrid1.CurrentPageIndex; //取得绑定数据 Bind(); } } } 在这段程序中,首先在数据绑定时,设置DataGrid控件的VirtualItemCoun属性值为查询结果集中的 记录总数,然后取得当前页要显示的数据,初始化时当前页显示的数据为从取到的数据的零位置开始,到 DataGrid控件的PageSize属性的设定值为止的数据记录数.在分页操作中重新定义了取得下一页数据时的数据项的开始索引值,然后调用数据绑定方法把取到的新数据和DataGrid控件重新绑定.

如何实现VB中用DataGrid控件显示数据

  VB利用DataGrid控件显示数据库中数据信息,DataGrid在数据库数据显示的时候非常重要,它在用户操作舒适度及数据排列方面有独到之处,对于Vb数据库编程的用户来说,掌握DataGrid的使用是至关重要的事情。  参考实例如下:  Public cnn As adodb.Connection  Public rst As adodb.Recordset  Public Sub setdb()  Set cnn = New adodb.Connection  cnn.Provider = “Microsoft.Jet.OLEDB.4.O“  cnn.ConnectionString = “Data Source=“ & App.Path & “\personal.mdb;“  cnn.CursorLocation = adUseClient  cnn.Open  End Sub  Private Sub Form_Load()  On Error Resume Next  Dim Strsql As String  setdb  Set DataGrid1.DataSource = Nothing  Strsql = “select * from 备忘录 order by 编号“  Set rst = cnn.Execute(Strsql)  If Err Then  MsgBox “读取数据失败“  Exit Sub  End If  If rst.EOF Then  Set DataGrid1.DataSource = Nothing  Else  Set DataGrid1.DataSource = rst  End If  End Sub