GridView跟DataGrid比哪个好?

来源:互联网 发布:vc2010 socket编程 编辑:程序博客网 时间:2024/04/30 09:40

个人觉得当然是GridView好了,GridView是.NET2.0时出来的,是DataGrid的升级版,所以vs.net2003之后的版本在工具栏已经看不到DataGrid.不过微软还是保留了它,使用它得敲打代码 .许多人都用惯了DataGrid,可能会觉得GridView不好用,其实GridView有许多优点而且方便,了解它以后你会喜欢它的.

GridView的特点:

  • Binding to data source controls, such as SqlDataSource.
  • Built-in sort capabilities.
  • Built-in update and delete capabilities.
  • Built-in paging capabilities.
  • Built-in row selection capabilities.
  • Programmatic access to the GridView object model to dynamically set properties, handle events, and so on.
  • Multiple key fields.
  • Multiple data fields for the hyperlink columns.
  • Customizable appearance through themes and styles.

而DataGrid就没有这么多细化了的功能.

以下列举一些在数据绑定事件中GridView的优点和DataGrid相比之下的不足吧:

1.DataControlRowType

在GridView的RowDataBound事件,能够用DataControlRowType来判断当前所绑定的是header行还是data行等,如:DataControlRowType有DataRow,EmptyDataRow,Header,Footer,Pager等属性,

成员名称 说明   DataRow 数据控件的数据行。只有 DataRow 行能绑定数据。    EmptyDataRow 显示页按钮或页导航控件的行。页导航行不能绑定数据。    Footer 数据控件的脚注行。脚注行不能绑定数据。    Header 数据控件的标题行。标题行不能绑定数据。    Pager 显示页按钮或页导航控件的行。页导航行不能绑定数据。    Separator 行分隔符。行分隔符不能绑定数据。 


而DataGrid是靠ListItemType的EditItem,Item,AlternatingItem等属性来区分当前是怎样的行,其实上DataGrid针对是Item,不是row.

2.DataControlRowState

DataControlRowState 有Alternate,Edit,Insert,Normal,Selected属性

成员名称 说明   Alternate 指示该数据控件行是交替行。  

Alternate 状态在任何时候都可以与其他状态组合,例如与 NormalEditInsert 组合。这些行可能会受到数据控件的 AlternateRowStyle 属性影响(若已设置)。

  Edit 指示该行处于编辑状态,这通常是单击行的“编辑”按钮的结果。通常,EditInsert 状态互相排斥。    Insert 指示该行是新行,这通常是单击“插入”按钮添加新行的结果。通常,InsertEdit 状态互相排斥。    Normal 指示该数据控件行处于正常状态。Normal 状态与其他所有状态互相排斥。    Selected 指示该行已被用户选定

如果GridView要找出哪一行处理编辑状态,可以这样的条件来判断:((e.Row.RowState & DataControlRowState.Edit) != 0)

而DataGrid用是ListItemType.EditItem来判断,将type跟state的概念混在一起了.

3.e.Row

GridView的e.Row可以被转换成DataRow类型,这样就方便取得绑定在GridView里每行的数据了,如((DataRow)e.Row)["CompanyId"]. 而DataGrid不能这样转换,只有e.Item.DataItem可用,要取得绑定数据需要用DataBinder.Eval方法,如DataBinder.Eval(e.Item.DataItem, "r_CompanyId").

4.Keys、OldValues、NewValues集合

Keys字典中一般存放的是数据源中的主键字段的key和value的对应值,如果主键由多个字段组成,那么Keys为每个键字段添加其字段名称和值。OldValues中存放的是要更新的行的字段名和原始值,每个字段为其中的一项。NewValues中存放的是要更新的行的字段名和修改后的值,每个字段为其中的一项。注意,主键字段只存放于keys集合中。

这三个集合中的每一项都是DictionaryEntry类型的对象,我们可以用DictionaryEntry.Key来确定一个项的字段名称,用DictionaryEntry.Value来确定某项的值。

在上面的例子中,为了把密码明文加密后再存入数据库,我们利用了NewValues字段,重新设置key为password的项的值。为了保证安全性,我们在更新数据前对NewValues中的所有值进行html编码:

Example1:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

{

//遍历NewValues,取得其中每一对DictionaryEntry对象

       foreach (DictionaryEntry de in e.NewValues)

 

//de.key就是字段名,如果此处单独更新某字段的话,也可以直接填写字段名,//比如 e.NewValues[“password”]

 

       e.NewValues[de.Key] = Server.HtmlEncode(de.Value.ToString());

    }

 

Example2:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

{

  //分别利用Keys、OldValues、NewValues取得主键名、原始数据和更新后数据

        Message .Text = e.Keys["username"] + "的email地址从" + e.OldValues["email"] + "变更为" +    e.NewValues["email"];

}

DataGrid没有这些.

http://www.techmango.com/blog/article.asp?id=475