百度
360搜索
搜狗搜索

datagrid,ASP.NET中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控件提供了更强大更灵活的以表格形式显示数据的功能。

ASP.NET中DataGrid控件应用技巧简述

   一.概述
  运用ASP NET开发Web应用程序过程中 DataGrid是一个非常重要的控件 几乎任何和数据相关的表现都要用到该控件 所以熟练掌握DataGrid控件的应用技巧是每个Web开发人员所必备的基本能力
  DataGrid控件能以表格的方式显示数据源中的数据 并提供了诸如分页 排序以及过滤等一些强大的内置功能 所以它能大大简化Web应用程序的开发过程 同时 开发者还可以通过运用各种不同的数据绑定列来自定义DataGrid控件显示数据的方式 这样就大大增强了DataGrid控件的功能 本文我就将向大家介绍如何运用其中的TemplateColumn EditCommandColumn HyperlinkColumn ButtonColumn以及BoundColumn等来自定义DataGrid控件显示数据的方式
  二.BoundColumn数据列的应用
  一般地 我们运用DataGrid控件开发数据驱动的Web应用程序时会以一行显示数据源中的某一条记录 而其中的一列则显示某个特定的字段值 DataGrid控件本身为我们提供了强大的功能 所以我们只需要以很少的代码便可以实现数据的显示功能 不过 这样也带来了一个问题 那就是我们如何来个性化显示数据的方式呢?显然DataList控件和Repeater控件在这个方面要强于DataGrid控件 不过如果我们放弃了DataGrid控件也就相当于放弃了其具有的强大功能 那么 我们如何运用DataGrid控件也来实现数据显示的自定义功能呢?首先 我们得把DataGrid控件根据数据源自动产生数据绑定列的功能关掉 方法很简单 就是将其AutoGenerateColumns属性设置为False即可 下面是这种方法的一个示例

<asp:DataGrid runat= server id= myDataGrid AutoGenerateColumns= False ></asp:DataGrid>
  一旦其AutoGenerateColumns属性为False值 我们就得编程实现数据列的绑定了 在绑定数据列过程中 我们可以运用上面介绍的五中数据列中的任何一种 不过任何数据列都必须在<Columns></Columns>标记内被定义 这个标记能表明被定义的对象是一种数据列
  下面我们首先来介绍BoundColumn数据列的应用 通过运用BoundColumn数据列 我们能根据自己的需求来动态地将数据源中的数据绑定到特定的数据列上并修改数据列的外观 比如我们可以更改各个列显示的次序 使DataGrid控件只显示某些字段的值而非全部字段的值 更改数据列的标题等等 BoundColumn数据列能设定DataField DataFormatString FooterText HeaderText HeaderImageUrl以及SortField等属性 而正是这些使得DataGrid控件的外观变得千变万化 多姿多彩
  下面 我们来建立一个示例性的Web应用程序项目 该项目运用到了DataGrid控件 并且显示了如何在其中运用BoundColumn数据列来自定义数据的显示方式 下面是本项目的主要文件以及其代码后置文件的内容
  WebForm aspx
<%@ Page language= c# Codebehind= WebForm aspx cs AutoEventWireup= false Inherits= DataGridTemplates WebForm %><!DOCTYPE HTML PUBLIC //W C//DTD HTML Transitional//EN ><HTML><HEAD><title>WebForm </title><meta name= GENERATOR Content= Microsoft Visual Studio ><meta name= CODE_LANGUAGE Content= C# ><meta name= vs_defaultClientScript content= JavaScript ><meta name= vs_targetSchema content= //schemas microsoft /intellisense/ie ></HEAD><body><form id= Form method= post runat= server ><asp:DataGrid runat= server id= myDataGrid AutoGenerateColumns= False BorderWidth= px Font Names= Verdana Arial sans serif Font Size= px BorderColor= # GridLines= Horizontal CellPadding= ><AlternatingItemStyle BackColor= #E E E ></AlternatingItemStyle><HeaderStyle Font Bold= True ForeColor= White BackColor= Teal ></HeaderStyle><Columns><asp:BoundColumn DataField= CustomerID HeaderText= ID ></asp:BoundColumn><asp:BoundColumn DataField= CompanyName HeaderText= Company Name ></asp:BoundColumn><asp:BoundColumn DataField= ContactName HeaderText= Contact Name ></asp:BoundColumn><asp:BoundColumn DataField= Address HeaderText= Address ></asp:BoundColumn><asp:BoundColumn DataField= City HeaderText= City ></asp:BoundColumn><asp:BoundColumn DataField= Region HeaderText= Region ></asp:BoundColumn><asp:BoundColumn DataField= PostalCode HeaderText= Postal Code ><HeaderStyle Wrap= False ></HeaderStyle></asp:BoundColumn></Columns></asp:DataGrid></form></body></HTML>
WebForm aspx cs using System;using System Collections;using System ComponentModel;using System Data;using System Data SqlClient;using System Drawing;using System Web;using System Web SessionState;using System Web UI;using System Web UI WebControls;using System Web UI HtmlControls;
namespace DataGridTemplates{/// <summary>/// WebForm 的摘要说明 /// </summary>public class WebForm : System Web UI Page{protected System Web UI WebControls DataGrid myDataGrid;
private void Page_Load(object sender System EventArgs e){// 在此处放置用户代码以初始化页面if( !Page IsPostBack )BindData();}
private void BindData(){SqlConnection con = new SqlConnection( server=localhost;database=Northwind;integrated security=true; );SqlCommand cmd = new SqlCommand( SELECT * FROM Customers con );
try{con Open();myDataGrid DataSource = cmd ExecuteReader();myDataGrid DataBind();con Close();}catch( Exception ) {}if( con != null && con State == ConnectionState Open )con Close();}
#region Web Form Designer generated codeoverride protected void OnInit(EventArgs e){//// CODEGEN 该调用是 ASP NET Web 窗体设计器所必需的 //InitializeComponent();base OnInit(e);}
/// <summary>/// 设计器支持所需的方法 不要使用代码编辑器修改/// 此方法的内容 /// </summary>private void InitializeComponent(){ this Load += new System EventHandler(this Page_Load);}#endregion}}
  项目创建完毕 在浏览器中运行的效果如图 所示
图 DataGrid控件中运用BoundColumn数据列显示数据的效果
   三.HyperlinkColumn数据列以及ButtonColumn数据列的应用
  上面我向大家介绍了BoundColumn数据列的应用 而其它的两种数据列 HyperlinkColumn数据列以及ButtonColumn数据列的应用方式与之相差无几
  HyperlinkColumn数据列包含了DataTextField属性以及DataNavigateUrlField属性等 前者可以用于指定要显示的文本内容 而后者则用于指定超链接 同时HyperlinkColumn数据列还包含了一个可用于指定文本显示格式的DataNavigateUrlFormatString属性
  像HyperlinkColumn数据列那样ButtonColumn数据列也提供了DataTextField属性以及DataTextFormatString属性 同时它还提供了一个CommandName属性 该属性能指定按钮被点击时服务器端的响应动作 而此时DataGrid控件的OnItemCommand属性必须指向一个相应的方法 该方法在按钮被点击时会自动被调用 DataGrid控件中的一行可以包含多个ButtonColumn数据列 每个数据列中的按钮消息响应函数都是OnItemCommand属性所对应的方法 而不同的按钮是根据其CommandName属性来区分函数所应执行的不同部分的 ButtonColumn数据列还提供了一个ButtonType属性以指定按钮的外观 该属性包括两种可取值 LinkButton(默认)和PushButton
  下面我们在原来解决方案的基础上再添加一个新的Web应用程序项目 并在其中运用DataGrid控件的BoundColumn数据列 HyperlinkColumn数据列以及ButtonColumn数据列 下面是本项目的主要文件以及其代码后置文件的内容
  WebForm aspx
<%@ Page language= c# Codebehind= WebForm aspx cs AutoEventWireup= false Inherits= DataGridTemplates WebForm %><!DOCTYPE HTML PUBLIC //W C//DTD HTML Transitional//EN ><HTML><HEAD><title>WebForm </title><meta name= GENERATOR Content= Microsoft Visual Studio ><meta name= CODE_LANGUAGE Content= C# ><meta name= vs_defaultClientScript content= JavaScript ><meta name= vs_targetSchema content= //schemas microsoft /intellisense/ie ></HEAD><body MS_POSITIONING= FlowLayout ><form id= Form method= post runat= server ><asp:DataGrid id= myDataGrid runat= server HeaderStyle Font Bold= True Cellpadding= BorderWidth= px AutoGenerateColumns= False GridLines= Horizontal Font Names= Verdana Arial sans serif Font Size= px BorderStyle= Solid ><AlternatingItemStyle BackColor= #EFEFEF ></AlternatingItemStyle><ItemStyle Font Size= X Small ></ItemStyle><HeaderStyle Font Bold= True ForeColor= White BackColor= Teal ></HeaderStyle><Columns><asp:BoundColumn DataField= CustomerID HeaderText= ID ></asp:BoundColumn><asp:HyperLinkColumn DataNavigateUrlField= Url DataTextField= CompanyName HeaderText= Comapny Name ></asp:HyperLinkColumn><asp:ButtonColumn Text= Get Details ButtonType= PushButton CommandName= GetDetails ></asp:ButtonColumn></Columns></asp:DataGrid></form></body></HTML>
WebForm aspx cs using System;using System Collections;using System ComponentModel;using System Data;using System Data SqlClient;using System Drawing;using System Web;using System Web SessionState;using System Web UI;using System Web UI WebControls;using System Web UI HtmlControls;
namespace DataGridTemplates {/// <summary>/// WebForm 的摘要说明 /// </summary>public class WebForm : System Web UI Page{protected System Web UI WebControls DataGrid myDataGrid;
private void Page_Load(object sender System EventArgs e){// 在此处放置用户代码以初始化页面if( !Page IsPostBack )BindData();}
private void BindData(){SqlConnection con = new SqlConnection( server=localhost;integrated security=true;database=Northwind );SqlCommand cmd = new SqlCommand( SELECT * // + CustomerID + As Url FROM Customers con );try{con Open();myDataGrid DataSource = cmd ExecuteReader();myDataGrid DataBind();con Close();}catch( Exception ) {}if( con != null && con State == ConnectionState Open )con Close();}
#region Web Form Designer generated codeoverride protected void OnInit(EventArgs e){//// CODEGEN 该调用是 ASP NET Web 窗体设计器所必需的 //InitializeComponent();base OnInit(e);}
/// <summary>/// 设计器支持所需的方法 不要使用代码编辑器修改/// 此方法的内容 /// </summary>private void InitializeComponent(){ this myDataGrid ItemCommand += new System Web UI WebControls DataGridCommandEventHandler(this myDataGrid_ItemCommand);this Load += new System EventHandler(this Page_Load);}#endregion
private void myDataGrid_ItemCommand(object source System Web UI WebControls DataGridCommandEventArgs e){if( e CommandName == GetDetails )Response Redirect( WebForm aspx?id= + e Item Cells[ ] Text );}}}
  项目创建完毕 在浏览器中运行的效果如图 所示
图 DataGrid控件中运用HyperlinkColumn以及ButtonColumn数据列显示数据的效果
   四.TemplateColumn数据列的应用
  DataGrid控件中的TemplateColumn数据列可以说是功能极其强大的 灵活地运用它就能使得DataGrid控件显示数据的方式变得多种多样 TemplateColumn数据列主要为我们提供了以下四种数据列模板
  ·HeaderTemplate   ·ItemTemplate   ·EditItemTemplate   ·FooterTemplate
  其中HeaderTemplate是用于显示DataGrid控件的首行中的文本 图片或是绑定数据的 FooterTemplate的功能与HeaderTemplate的功能类似 不过它是用于显示尾行中的内容的 EditItemTemplate是应用于具有编辑功能的数据列的 任何运用了该模板的数据列的数据能被用户编辑并在适当时候更新到数据源中
  ItemTemplate允许你建立具有完全自定义数据显示方式的数据列 通过运用<%# Container DataItem( [FieldName] ) %>或<%# DataBinder Eval(Container DataItem [FieldName] { :[FormatString]} ) %>两种数据绑定语法你就可以将数据源中的某列数据绑定到相应的数据列中并赋予完全自定义的显示方式
  下面我们在第三步中建立的Web应用程序中添加一个新的Web页面-WebForm 该页面能显示公司的详细信息 也就是在图 中的按钮被点击时浏览器会导向到的页面 它能根据用户的选择显示相应公司的详细信息 方法就是判断Request QueryString内的信息 如果其中包含了一个 id 名/值对 则根据其中的值选择相对应的公司信息并显示在页面中 如果没有包含任何 id 值的信息则从数据表中选取所有公司的信息并显示在页面中 同时还要指出的是 在一个DataGrid控件中你可以将多种类型的数据列结合起来一起使用 并根据不同的需要选择合适的数据列显示相应的数据 下面是本页面的HTML文件以及其代码后置文件的内容
  WebForm aspx
<%@ Page language= c# Codebehind= WebForm aspx cs AutoEventWireup= false Inherits= DataGridTemplates WebForm %><!DOCTYPE HTML PUBLIC //W C//DTD HTML Transitional//EN ><HTML><HEAD><title>WebForm </title><meta name= GENERATOR Content= Microsoft Visual Studio ><meta name= CODE_LANGUAGE Content= C# ><meta name= vs_defaultClientScript content= JavaScript ><meta name= vs_targetSchema content= //schemas microsoft /intellisense/ie ></HEAD><body MS_POSITIONING= FlowLayout ><form id= Form method= post runat= server ><asp:datagrid id= myDataGrid runat= server ItemStyle Font Size= x *** all HeaderStyle Font Bold= True HeaderStyle Font Size= x *** all AlternatingItemStyle BackColor= #EFEFEF Cellpadding= BorderWidth= AutoGenerateColumns= False BorderStyle= Solid GridLines= Horizontal BorderColor= # Font Names= Verdana Arial sans serif Font Size= px ><AlternatingItemStyle BackColor= #E E E ></AlternatingItemStyle><ItemStyle Font Size= X Small ></ItemStyle><HeaderStyle Font Size= X Small Font Bold= True ForeColor= White BackColor= Teal ></HeaderStyle><Columns><asp:TemplateColumn><HeaderTemplate><b>Company Detail</b></HeaderTemplate><ItemTemplate><table border= Cellpadding= Cellspacing= Width= % style= FONT SIZE: px; FONT FAMILY: Verdana Arial sans serif ><tr><td colspan= ><b><%# DataBinder Eval( Container DataItem CompanyName ) %></b></td></tr><tr><td width= % valign= top ><b>Contact:</b></td><td width= % valign= top nowrap><%# DataBinder Eval( Container DataItem ContactName ) %></td><td width= % valign= top ><b>Phone:</b></td><td width= % valign= top nowrap><%# DataBinder Eval( Container DataItem Phone ) %></td></tr><tr><td width= % valign= top ><b>Title:</b></td><td width= % valign= top ><%# DataBinder Eval( Container DataItem ContactTitle ) %></td><td width= % valign= top ><b>Fax:</b></td><td width= % valign= top nowrap><%# DataBinder Eval( Container DataItem Fax ) %></td></tr><tr><td width= % valign= top ><b>Address:</b></td><td width= % valign= top colspan= ><%# DataBinder Eval( Container DataItem Address ) %><br><%# DataBinder Eval( Container DataItem City ) %> <%# DataBinder Eval( Container DataItem Region ) %><%# DataBinder Eval( Container DataItem PostalCode ) %><br><%# DataBinder Eval( Container DataItem Country ) %></td></tr></table></ItemTemplate></asp:TemplateColumn></Columns></asp:datagrid></form></body></HTML>
WebForm aspx cs using System;using System Collections;using System ComponentModel;using System Data;using System Data SqlClient;using System Drawing;using System Web;using System Web SessionState;using System Web UI;using System Web UI WebControls;using System Web UI HtmlControls;
namespace DataGridTemplates {/// <summary>/// WebForm 的摘要说明 /// </summary>public class WebForm : System Web UI Page{protected System Web UI WebControls DataGrid myDataGrid;
private void Page_Load(object sender System EventArgs e){// 在此处放置用户代码以初始化页面if( !Page IsPostBack )BindData();}
private void BindData(){DataSet ds = new DataSet();SqlDataAdapter da;String strSQL;
if( Request QueryString[ id ] == null )strSQL = SELECT * FROM Customers ;elsestrSQL = SELECT * FROM Customers WHERE CustomerID = + Request QueryString[ id ] ToString() + ;
da = new SqlDataAdapter( strSQL server=localhost;integrated security=true;database=Northwind );da Fill( ds Customers );myDataGrid DataSource = ds Tables[ Customers ] DefaultView;myDataGrid DataBind();}
#region Web Form Designer generated codeoverride protected void OnInit(EventArgs e){//// CODEGEN 该调用是 ASP NET Web 窗体设计器所必需的 //InitializeComponent();base OnInit(e);}
/// <summary>/// 设计器支持所需的方法 不要使用代码编辑器修改/// 此方法的内容 /// </summary>private void InitializeComponent(){ this Load += new System EventHandler(this Page_Load);}#endregion}}
  新页面创建完毕 在浏览器中运行的效果如图 所示
图 DataGrid控件中运用TemplateColumn数据列显示数据的效果
   五.总结
lishixinzhi/Article/program/net/201311/15737

阅读更多 >>>  if函数的使用方法及实例多条件,excelif函数怎么用多个条件

如何使用DataGrid控件

DataGrid控件不是数据容器
所以你不能够在DataGrid控件中更改数据
只能相应的更改数据源如DataTable
〔DataGrid控件〕
在三种控件当中,DataGrid是迄今为止功能最为丰富的,但也是最不灵活的控件。这种在输出HTML时不够灵活的特点是因为它最初就是被设计成以表格的形式输出数据。每一条记录输出时会建立一对标签,而每个字段的值输出时则建立一对标签。
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使用表格来显示数据。你也许需要更进一步地控制数据的显示。例如,你想使数据在表格中显示,但不是每行只有一条记录,而是多条。又或者,你并不想使用表格来显示数据,而是只将它们显示在一系列

  • <%# DataBinder.Eval(Container.DataItem, "EmployeeName") %>

Repeater类不是继承自WebControl类的,这一点与DataGrid和DataList不同。所以,Repeater没有样式方面的属性可供设定。也就是说,如果你想格式化输出Repeater的数据记录,你必须使用HTML标签来设定样式。如,在一例中,如果我们想将雇员名字显示成粗体,我们必须在ItemTemplate设置相应的HTML标签:

  • <%# DataBinder.Eval(Container.DataItem, "EmployeeName")%>
  • 而如果使用DataGrid或DataList,我们只通过设定ItemStyle-Font-Bold属性为True即可实现。

    Repeater在格式化设定上的欠缺,直接反映到开发时间的延长上来。对输出数据样式上的越多要求,就越会导致开发周期的延长。这些在模板中规定样式的HTML标签也越发得显得混乱,而且,在将来页面更改时会更加困难,特别是当一个新的开发人员接替工作时。而使用DataGrid或DataList你尽可以只设定样式属性,而不使用模板。而且,如果使用Visual Studio.Net或ASP.Net Web Matrix工作时,这些属性更可以被直接设定而无需编码。

    因为Repeater开发时间的延长,其在内建功能(分页、排序及编辑)上的支持也显得不足。因此在可用性方面,Repeater有着明显的缺陷。当然,
    如果用户对于如何显示数据无所谓的话,这也算不了什么大问题。我之所以强调这个“如果”,是因为尽管用户有时在设计时并不要求能够分页、排序或编辑记录,但这样的要求往往会在开发后期,或在他们能看到显示出来的记录后产生。

    Repeater唯一优于DataGrid和DataList的特点是它的性能,尤其明显优于DataGrid。而比DataList略高一点点。

    〔结论〕

    在ASP.Net页面上显示数据时,多数的程序员会选择他们所熟悉的控件来使用,特别是DataGrid。然而,这样盲目的选择在没有“最好的通用控件”的情况下是不明智的。在选择控件来显示数据前,不妨问自己几个问题来帮助决策:是否允许用户对记录排序?是不是记录需要显示在非表格的情况下?页面是否会被高频度地访问,因此应多考虑性能?

    DataGrid提供了最多的功能,如允许访问者对记录编辑、排序或分页。同时它也是最容易使用的,甚至于简单到只需要将之添加到页面中而不必额外编写代码。不过这些易用性是以性能的损失为代价的。DataGrid在三种控件中是效率最低的,特别是在使用Web Form的情况下。

    通过使用模板,DataList提供了比DataGrid更加优秀的界面效果。不过这需要以牺牲一定的开发时间为代价。为了添加排序、分页和编辑功能,程序员不得不花费比使用DataGrid更多的精力来进行编码,虽然它的性能要优于DataGrid。

    最后,Repeater允许对数据记录作最大限度的HTML定制。通常,使用Repeater来显示数据记录比使用DataGrid和DataList要耗费更长的开发时间。另外,它不支持内建的编辑、排序和分页功能。所幸的是,Repeater在性能上要优于其它两种控件,特别是明显优于DataGrid。
    请高手讲下vb中的DataGrid控件

    repeater空间相对于datagridview来说自定义显示方面比较有优势,可以尝试下!
    就像C#一样的 gread View 一样 用起来 很方便,你是哪些问题啊 ?
    在三种控件当中,DataGrid是迄今为止功能最为丰富的,但也是最不灵活的控件。这种在输出HTML时不够灵活的特点是因为它最初就是被设计成以表格的形式输出数据。每一条记录输出时会建立一对标签,而每个字段的值输出时则建立一对标签。
    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

    C#高级编程: DataGrid类的层次结构[1]

    ——此文章摘自《C#高级编程(第 版)》定价 元 特价 元 购买 DataGrid主要部分的类层次结构如图 所示

    DataGrid由 个或多个DataGridTableStyles组成 样式风格包含 个或多个DataGrid Column Styles 网格中给定的单元格可以通过DataGridCell结构来访问
    但除了让运行程序创建DataGridTables 和 DataGridColumns外 DataGridTableStyles 和 DataGridColumnStyles还有更多的内涵 下面的几节就详细介绍这两个类和上图中列出的其 他类
    下面介绍DataGridTableStyle和 DataGridColumnStyle的内容

    DataGridTableStyle包含DataTable的可视化表示 DataGrid包含这些样式的一个集合 它们可通过TableStyles属性来访问 在显示DataTable时 要对所有的DataGridTableStyle对象进行检查 以查找MappingName等于 DataTable的TableName属性的样式匹配 找到这样的一个匹配后 就使用它显示数据表
    DataGridTableStyle允许为DataGrid定义各种可视化参数 例如背景色和前景色 列标题的字体以及其他属性 DataGridColumnStyle可以一列一列地细调显示选项 例如设置列中数据的对齐方式 NULL值的显示文本 列在屏幕上的宽度等
    在DataGrid使用一个已定义好的DataGridTableStyle来显示DataTable时 只会显示那些已构建了DataGridColumnStyle的列 只有定义了风格的列才能显示 这非常适合于隐藏某些列 例如主键码值一般不显示 也可以把列的样式定义为ReadOnly 列的隐藏不像过滤列和过滤行的方法那样简单 但也不是很难
    下面的代码显示了创建DataGridTableStyle的示例 这个示例创建了一个DataGridTableStyle对象 添加两个DataColumnStyle对象 然后显示Customers表中的所有数据 下面列出了所有的代码 因为它是本章其他几个示例的基础 代码的第一部分与前面示例的类似 using System; using System Windows Forms; using System Data; using System Data SqlClient; public class CustomDataGridTableStyle : System Windows Forms Form

    lishixinzhi/Article/program/net/201311/15057

    VB的DataGrid用法?

    实在抱歉,vb.net接触的少,不过在.net中很多做法都是一样的。datagridview有一个事件叫CellValueChanged,不知道你能不能找到?
    完整的事件定义如下(我这个地方控件命名为DataGridView1:
    Private Sub DataGridView1_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
    他里面有一个参数e,e有两个属性一个是ColumnIndex,RowIndex。通过这个你就可以得到具体的选中的是什么数字。然后你可以用判断这三种状态来设置颜色。
    /////////////////////////////////////////////////////////////
    这个是事件响应函数,你选中那个datagrid控件,然后右键点击属性,然后选择事件栏:在里面有一个CellValueChanged事件,你双击之后,编译器会给你生成这个函数。你不会事件到现在都没用过吧?
    不过vb.net我语法不太懂,不然替你实现了。
    需要在加一个Text控件
    VB的DataGrid用法:
    DataGrid 控件是一种类似于电子数据表的绑定控件,可以显示一系列行和列来表示 Recordset 对象的记录和字段。可以使用 DataGrid 来创建一个允许最终用户阅读和写入到绝大多数数据库的应用程序。DataGrid 控件可以在设计时快速进行配置,只需少量代码或无需代码。当在设计时设置了 DataGrid 控件的 DataSource 属性后,就会用数据源的记录集来自动填充该控件,以及自动设置该控件的列标头。然后您就可以编辑该网格的列;删除、重新安排、添加列标头、或者调整任意一列的宽度。
    在运行时,可以在程序中切换 DataSource 来察看不同的表,或者可以修改当前数据 库的查询,以返回一个不同的记录集合。
    可能的用法
    1.查看和编辑在远程或本地数据库中的数据。 2.与另一个数据绑定的控件(诸如 DataList 控件)联合使用,使用 DataGrid 控件来
    显示一个表的记录,这个表通过一个公共字段链接到由第二个数据绑定控件所显示 的表。
    使用 DataGrid 控件的设计时特性
    可以不编写任何代码,只通过使用 DataGrid 控件的设计时特性来创建一个数据库应用程序。下面的说明概要地说明了在实现 DataGrid 控件的典型应用时的一般步骤。
    要在设计时实现一个 DataGrid 控件
    1.为您希望访问的数据库创建一个 Microsoft 数据链接 (.UDL) 文件。请参阅“创建 Northwind OLE DB 数据链接”主题,以获得一个示例。2.在窗体上放置一个 ADO Data 控件,并将其 ConnectionString 属性设置为在第 1 步中所创建的OLE DB 数据源。
    3.在这个 Ado Data 控件的 RecordSource 属性中输入一条将返回一个记录集的 SQL 语句。例如:
    Select * From MyTableName Where CustID = 124.在窗体上放置一个 DataGrid 控件,并将其 DataSource 属性设置为这个 ADO Data 控件。
    5.右键单击该 DataGrid 控件,然后单击“检索字段”。
    6.右键单击该 DataGrid 控件,然后单击“编辑”。
    7.重新设置该网格的大小、删除、或添加网格的列。
    8.右键单击该 DataGrid 控件,然后单击“属性”。
    9.使用“属性页”对话框来设置该控件的适当的属性,将该网格配置为所需的外观和行为。
    在运行时更改显示的数据
    在创建了一个使用设计时特性的网格后,也可以在运行时动态地更改该网格的数据源。下面介绍实现这一功能的通常方法。
    更改 DataSource 的RecordSource
    更改所显示的数据的最通常的方法是改变该 DataSource 的查询。例如,如果 DataGrid 控件使用一个 ADO Data 控件作为其 DataSource,则重写 RecordSource、刷新该 ADO Data 控件、都将改变所显示的数据。
    ' ADO Data 控件连接的是 Northwind 数据库的' Products 表。新查询查找所有 ' SupplierID = 12 的记录。Dim strQuery As StringstrQuery = "SELECT * FROM Suppliers WHERE SupplierID = 12"Adodc1.RecordSource = strQueryAdodc1.Refresh
    更改 DataSource
    在运行时,可以将 DataSource 属性重新设置为一个不同的数据源。例如,您可能具有若干个 ADO Data 控件,每个控件连接不同的数据库,或设置为不同的 RecordSource 属性。可以简单地将 DataSource 从一个 ADO Data 控件重新设置为另一个 ADO Data 控件:' 将 DataSource 重新设置为一个连接到 Pubs 数据库的、' 使用 Authors 表的 ADO Data 控件。Set DataGrid1.DataSource = adoPubsAuthors
    重新绑定 DataSource
    当将 DataGrid 控件用于一个远程数据库,诸如 SQLServer 时,可以改变表的结构。例如,可以给这个表添加一个字段。在这种情形时,可以调用 Rebind 方法根据新的结构来重新创建该网格。注意,如果已经在设计时改变了这个列的布局,DataGrid 控件将会试图重新创建当前的布局,包括任何空的列。不过,通过首先调用 ClearFields 方法,可以强制该网格重新设置所有的列。

    阅读更多 >>>  让中、英文输入法智能化地出现

    vb中如何获取datagrid选中行的值?

    在Datagrid中双击某行,可以准确取得当前行某个字段的值(其中一个单元格:也就是对应你数据库的这个字段,你怎么设置这一列是哪个字段就是第几个字段)。要显示这个值时,使用:text1.text=Adodc1.Recordset.fields("你的字段名或以0为起始的序号")
    先说明datagrid的一些属性,说清楚了,自然解决方法就明了了。
    说明:
    Bookmark:设置或返回当前的行标签号
    DataGrid1.Columns("ProductID").CellText(DataGrid1.Bookmark)
    返回当前行中字段为‘ProductID’的值。

    DataGrid
    被连接到一个数据库后,可能想要监视用户单击了哪一个单元。可以使用
    RowColChange
    事件——而不是
    Click
    事件。
    如;
    Private
    Sub
    DataGrid1_RowColChange(LastRow
    As
    Variant,
    ByVal
    LastCol
    As
    Integer)
    Debug.Print
    _DataGrid1.Columns("ProductID").CellValue(DataGrid1.Bookmark)
    End
    Sub
    通过这个方法就能获得用户点击的行的某个值。
    利用一下方法可以控制datagrid每列的宽度;
    Dim
    c
    As
    Column
    Set
    c
    =
    DataGrid1.Columns.Add(DataGrid1.Columns.Count)
    With
    c
    .Visible
    =
    True
    .Width
    =
    1000
    .Caption
    =
    "我的新列"
    .DataField
    =
    Adodc1.Recordset.Fields("ProductName").Name
    .Alignment
    =
    dbgRight
    End
    With
    下面的代码将删除被单击的列。
    Private
    Sub
    DataGrid1_HeadClick(ByVal
    ColIndex
    As
    Integer)
    DataGrid1.Columns.Remove
    ColIndex
    End
    Sub
    我给个思路你吧,详细代码你自已写吧!
    用鼠标选中一行后,读取这一个里你固定一列的内容,最好是固定为编号或者是id号的哪一列,这个编号一定要是唯一的。
    然后用sql语句根椐编号查找到该条记录,然后就删除该条记录就ok了。
    你上边的语句,记录的指针始终指在第一行,你当然只是删第一行拉。
    晕死,谁叫你输入编号去删,你选中某一行后,这行的id号就直接赋值给一个变量,再用sql语句查找,做一个commamd按钮,作为删除用的不就行了.

    winform 中 对DataGrid 简单操作

    一、WinForm下DataGrid的结构
    想要使用自定义的列样式,首先必须了解DataGrid的结构。在我们将一个DataGrid控件拖到窗体上的时候,我们可以马上在属性中设置它的样式,改变它数据行的交替色等。这不同于ASP.NET下的样式设置。在ASP.NET中,最终的改变都体现为网页的HTML语言。而在WinForm下,这种改变是通过控制DataGrid的DataGridTableStyle属性(对象)来体现的,而DataGridTableStyle又是由若干个DataGridColumnStyle组成的。它们的层次结构如下图所示:

    因此,最后的问题归结为:我们必须创建符合自己需求的DataGridColumnStyle,将其加入到DataGridTableStyle中,然后将这个DataGridTableStyle指定到相应的DataGrid上。再通过绑定相应的数据源,最后将数据体现出来。(有关如何将DataGridTableStyle及DataGridColumnStyle与数据源绑定,因为不是本文重点,在此不再赘述)
    上面我们说了,微软默认提供了两种列样式:DataGridTextBoxColumn和DataGridBoolColumn。见下图:
    事实上,它们就是在DataGrid相应的列中放了控件TextBox和CheckBox而已。我们完全可以做类似的工作,通过创建一个继承自DataGridColumnStyle基类的组件,重载其中的一些方法以满足我们的需求。需要注意的是:我们虽然说在单元格中放置相应的控件,并不是指表格初始显示的时候该控件就出现,而是在相应的单元格获得焦点的时候,该单元格由文本形式变成相应的控件形式。如同默认的列样式一样,在单元格获取焦点的时候,变成一个文本框允许用户进行相应修改。
    二、开始工作

    在了解了基本的DataGrid结构之后,我们开始着手写一个自己的列出来。套用一下MSDN对该问题的描述:从DataGridColumnStyle继承时,必须重写方法Abort,Commit,Edit和Paint(2次)。在此,结合我的认识我还想说得是,如果希望在列中放置其他的控件,则必须还必须重载方法SetGridInColumn,该方法是将控件放入表格中的方法。当然,如果我们不需要如此灵活的功能,有时仅仅需要对现有列样式进行一些变通的话,我们甚至不需要从DataGridColumnStyle类进行继承。我们可能只需要从DataGridTextBoxColumn进行继承就行了,如同TaskVision中实现的那样。
    OK,现在整理一下思路,我们究竟要做些什么事情:
    (1) 我们需要把控件放入到表格中;
    (2) 初始情况下我们不希望该控件显示出来;
    (3) 在单元格接受焦点的时候,显示控件;
    (4) 接受控件值的改变;
    (5) 将改变显示在表格中,并刷新表格;
    下面以MSDN帮助上的例子来一步步进行上面的工作。相关其请参阅“DataGridColumnStyle类”帮助主题,这个例子在表格中放了控件DateTimePicker。
    (1) 将控件放入表格
    上面说了,实现该功能的是重载方法SetGridInColumn。我们如下写:
    protected override void SetDataGridInColumn(DataGrid value)
    {
    base.SetDataGridInColumn (value);
    if(myDateTimePicker.Parent == null)
    {
    value.Controls.Add(myDateTimePicker);
    }
    }
    这里的写法实际上和MSDN上的帮助并不一样,因为通过我运行该帮助代码而言,在点击了相应的单元格之后,并不会在Cell中出现一个DateTimePicker控件。通过调试我发现,在程序初始运行的时候,该方法连续执行了两次。如果按照MSDN上的写法,在第一次执行的时候,会加上这个控件。而在第二次运行该方法时,又从表格中删除了控件。因此若按照其原始写法,点击单元格不会有反应!
    ( 至于为什么该方法会执行两次,我搞不懂。希望有高手指点一下。我也搞不清,按照MSDN帮助上的写法,为什么要删除相应的控件。我认为如果不用控件,只要不显示就行了 )
    (2) 初始禁止控件显示
    这一点通过在构造函数中加以控制。如下:
    private DateTimePicker myDateTimePicker = new DateTimePicker();
    //判断当前是否处于编辑状态
    private bool isEditing;
    public DataGridTimePickerColumn() : base()
    {
    myDateTimePicker.Visible = false;
    }
    (3) 接受焦点并显示控件
    通过重载方法Edit来完成上述工作:
    protected override void Edit(CurrencyManager source, int rowNum, Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
    {
    //得到当前单元格中的值
    DateTime currentValue = (DateTime)GetColumnValueAtRow(source, rowNum);
    if(cellIsVisible)
    {
    //设定控件出现的位置,并注册相关事件
    myDateTimePicker.Bounds = new Rectangle(bounds.X + 2, bounds.Y + 2, bounds.Width - 4, bounds.Height - 4);
    myDateTimePicker.Value = currentValue;
    myDateTimePicker.Visible = true;
    myDateTimePicker.ValueChanged += new EventHandler(TimePickerValueChanged);
    }
    else
    {
    myDateTimePicker.Value = currentValue;
    myDateTimePicker.Visible = false;
    }
    if(myDateTimePicker.Visible)
    {
    //重绘当前单元格
    DataGridTableStyle.DataGrid.Invalidate(bounds);
    }
    }
    (4) 接受或放弃改变
    这是通过方法Commint和Abort来实现的。如下:
    protected override void Abort(int rowNum)
    {
    isEditing = false;
    myDateTimePicker.ValueChanged -= new EventHandler(TimePickerValueChanged);
    Invalidate();
    }
    protected override bool Commit(CurrencyManager dataSource, int rowNum)
    {
    //隐藏并取消事件注册
    myDateTimePicker.Bounds = Rectangle.Empty;
    myDateTimePicker.ValueChanged -= new EventHandler(TimePickerValueChanged);
    if(!isEditing)
    {
    return true;
    }
    isEditing = false;
    try
    {
    //取得选择的新值并赋予单元格
    DateTime selectedValue = myDateTimePicker.Value;
    SetColumnValueAtRow(dataSource, rowNum, selectedValue);
    }
    catch(Exception)
    {
    Abort(rowNum);
    return false;
    }
    Invalidate();
    return true;
    }
    (5) 刷新表格
    所谓刷新,实质上就是重新绘制当前的单元格。这通过方法Paint来实现。Paint共有三个方法重载。通过MSDN帮助可以知道,其中两个方法是以abstract修饰的,因此MSDN上说必须重写2次Paint方法。而另一个是以virtual修饰的,但一般来说,基类的方法并不适合我们使用。因此我们也重写该方法。如下:
    protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum)
    {
    Paint(g, bounds, source, rowNum, false);
    }
    protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, bool alignToRight)
    {
    Paint(g, bounds, source, rowNum, Brushes.Red, Brushes.Blue, alignToRight);
    }
    protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
    {
    DateTime date = (DateTime)GetColumnValueAtRow(source, rowNum);
    Rectangle rect = bounds;
    g.FillRectangle(backBrush, rect);
    rect.Offset(0, 2);
    rect.Height -= 2;
    g.DrawString(date.ToString("d"), this.DataGridTableStyle.DataGrid.Font, foreBrush, rect);
    }

    阅读更多 >>>  excel怎么输入公式

    如何动态设置DataGrid中某些行的选中状态

    1、为DataGrid添加一个RowSelectColumn列,并拖放到第一列显示;
    2、设置DataGrid的selectionMode属性值为“multiRows”;
    3、编写代码:
    代码可以根据实际情况放置到不同控件的事件中,比如点击某个按钮来设置grid的选中状态。
    代码思路:需要先获取需要选中那些行的数据,然后再通过设置dataGrid的selection属性来设置选中状态,其中selection是一个js数组,所以需要先把需要选中的数据push到一个数组中。
    若DataGrid对应的DataSet中有一个字段为state,当state=1时,需要选中,代码如下:
    var dataList=view.get("#dataset").getData(); //取得原始数据列表
    var selectedItems=[]; //定义一个数组
    dataList.each(function(entity){
    if (entity.get("state")==1){
    selectedItems.push(entity);
    }
    });
    view.set("#dataGrid.selection"),selectedItems);

    vb中datagrid自动调整列宽

    只能查询两遍,第一遍查最长的单元:
    SELECT max(len(字段1)) as fd1len, max(len(字段2)) as fd2len FROM 表
    然后根据返回记录设置datagrid的列宽
    1、你可以用楼上的方法,在form_load()中设置datagrid1.columns(0).width
    =
    2000为第一列,其他依次类推。
    2、你可以右击datagrid选择编辑》手工拖动列宽到合适的位置即可。

    网站数据信息

    "datagrid,ASP.NET中DataGrid控件应用技巧简述"浏览人数已经达到18次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:datagrid,ASP.NET中DataGrid控件应用技巧简述的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!