GridView跟DataGrid比哪个好?

个人觉得当然是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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要实现 GridView 列标题栏的筛选功能,你可以使用一些额外的库或自定义代码来实现。以下是一种常见的做法: 1. 首先,确保你的项目引用了 `System.Windows.Controls.DataGrid` 命名空间。 2. 在你的 XAML 文件中,将 DataGrid 控件的 `AutoGenerateColumns` 属性设置为 `False`,以便手动定义列。 ```xaml <DataGrid ItemsSource="{Binding YourData}" AutoGenerateColumns="False"> <!-- 列定义 --> </DataGrid> ``` 3. 添加列定义到 DataGrid 中,包括列标题和绑定的数据。 ```xaml <DataGrid.Columns> <DataGridTextColumn Header="Column1" Binding="{Binding Property1}" /> <DataGridTextColumn Header="Column2" Binding="{Binding Property2}" /> <!-- 其他列定义 --> </DataGrid.Columns> ``` 在这个例子中,我们使用 `DataGridTextColumn` 来定义文本列,你可以根据需要选择适当的列类型。 4. 添加筛选功能。你可以使用第三方库或自定义代码来实现列标题栏的筛选功能。一种常见的方法是使用 `DataGridExtensions` 库。你可以在 NuGet 包管理器中搜索并安装 `DataGridExtensions`。 ```xaml <DataGrid extensions:DataGridExtensions.EnableColumnVirtualization="True" extensions:DataGridExtensions.IsAutoFilterEnabled="True"> <!-- 列定义 --> </DataGrid> ``` 在这个例子中,我们使用了 `DataGridExtensions` 命名空间,并将 `IsAutoFilterEnabled` 属性设置为 `True`,以启用列标题栏的筛选功能。 这样,你就可以实现 GridView 列标题栏的筛选功能。请根据你的具体需求选择适合的方法来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值