Asp.net 1.1版本中的DataGrid控件用于显示表格式的数据,相信大家都用过。Asp.net 2.0版本中GridView控件是DataGrid控件的继承者,功能比DataGrid增强不少,但是也有很多地方不同。下面把使用中发现的不同点列举如下,希望能对大家的工作有所帮助:
1.     关于隐藏字段的处理:
DataGrid中我们一般把不需要显示又需要在编程中使用的字段在设计期设置为Visible=False,这样的字段不会显示出来,但在绑定数据时会被绑定值,所以我们可以通过DataGridItem.Cell[x].Text取到所需数据行的数据。
GridView中直接在设计期设置Visible=False却不能满足上述需求,因为这样设置,虽然字段不会被显示出来了,但数据也没有被绑定到相应的Cell中,通过GridViewRow.Cell[x].Text取到的全是空字符串,估计应该是控件的Bug。如果想达到上述的效果,可以通过其它方法实现,只是麻烦一些:
首先,不要设置字段的Visible=False
然后处理RowDataBound事件。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
   e.Row.Cells[x].Visible = false;
}
2.     关于按钮列的事件:
在DataGrid中,要响应控钮列中的按钮点击事件,可以处理ItemCommand事件:事件的第一个参数source是object类型的,值为DataGrid,第二个参数e是DataGridCommandEventArgs类型的,e中包含四个属性:Item的值为按钮所在的行,CommandSource的值为所点击的按钮,CommandName的值为按钮在设计期定义的值,CommandArgument的值固定为空字符串。在使用中,可以根据Item来区分点击的是哪个行中的按钮,可以根据CommandName来区分一个行中的多个按钮。
private void DataGrid1_ItemCommand(object source, DataGridCommandEventArgs e)
{
   ...
}
在GridView中,要响应控钮列中的按钮点击事件,可以处理RowCommand事件:事件的第一个参数sender是object类型的,值为GridView,第二个参数e是GridViewCommandEventArgs类型的,e中仅包含三个属性,比DataGrid控件中的相应事件少了关键的Item属性,CommandSource的值也与DataGrid中的不一样,在这里为GridView,CommandName的值为按钮在设计期定义的值,CommandArgument的值为被点击的按钮所在行的索引。在使用中,可以根据CommandArgument来区分点击的是哪个行中的按钮,可以根据CommandName来区分一个行中的多个按钮。
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
GridViewRow item = this.GridView1.Rows[Convert.ToInt32(e.CommandArgument)];
}
3.     关于按钮的客户端提示:
一般情况下,我们希望在最终删除一条数据之前让用户进行确认,这个可以使用模板列,在模板列中放置按钮控件,为按钮设置客户端单击事件。
在Asp.net 1.1中,需要使用编程方法才能为按钮指定客户端单击事件,方法如下:
<asp:TemplateColumn>
<ItemTemplate>
<asp:LinkButton id="LinkButton1" runat="server" CausesValidation="false" CommandName="Test" Text="Button"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
private void DataGrid1_ItemCreated(object sender, DataGridItemEventArgs e)
{
LinkButton btn = e.Item.FindControl("LinkButton1") as LinkButton;
if(btn != null)
{
btn.Attributes.Add(" confirm('你确认要删除这条数据吗?');");
}
}
在Asp.net 2.0中,方便了许多,可以在设计期设置OnClientClick属性来为按钮指定客户端单击事件,方法如下:
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="false" CommandName="Test" Text="按钮" OnClientClick="return confirm('你确认要删除这条数据吗?');"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
4.     关于时间字段的格式化输出:
假如我们有一个时间字段,数据为"2005-12-23 10:01:20",想显示为"10:01"
在DataGrid中,我们可以简单的设置字段的显示格式即可,如:
<asp:BoundField DataField="datetime" DataFormatString="{0:HH:mm}" />
在GridView中,相同的方法,却显示错误,仍显示为"2005-12-23 10:01:20",估计是控件的Bug(呵呵,Bug还真不少,微软这样的公司发布的东西也这么多Bug。可见...),不过,可以使用模板列解决此问题,方法如下:
<asp:TemplateField HeaderText="时间">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("datetime", "{0:HH:mm}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
5.     关于绑定空记录:
在DataGrid中,我们可以把一个包含空记录的DataSet或DataTable绑定给DataGrid,这样,呈现时,DataGrid会把数据源中的字段定义以表头的形式显示出来。
在GridView控件中,却不可以,如果DataSet或DataTable是空记录。则GridView连表头都不显示。只能通过变通的方法实现,稍微有一些麻烦:
public void BuildNoRecords(GridView gridView, DataSet ds)
{
if (ds.Tables[0].Rows.Count == 0)
{
ds.Tables[0].Rows.Add(ds.Tables[0].NewRow());
gridView.DataSource = ds;
gridView.DataBind();
int columnCount = gridView.Rows[0].Cells.Count;
gridView.Rows[0].Cells.Clear();
gridView.Rows[0].Cells.Add(new TableCell());
gridView.Rows[0].Cells[0].ColumnSpan = columnCount;
gridView.Rows[0].Cells[0].Text = "No Records Found.";
}
else
{
gridView.DataSource = ds;
gridView.DataBind();
}
}
6.     关于数据绑定,GridView使用新的数据绑定模式,请参考其它文献
本文来自CSDN博客,转载请标明出处:

转载于:https://blog.51cto.com/terryli/519588

GridView控件常见问题及处理方法相关推荐

  1. GridView控件详解

    GridView是ASP.NET 1.x的DataGrid控件的后继者.它提供了相同的基本功能集,同时增加了大量扩展和改进.如前所述,DataGrid(ASP.NET 2.0仍然完全支持)是一个功能非 ...

  2. GridView控件只让某列可以编辑,并在后台获取值的方法

    GridView控件只让某列可以编辑,并在后台获取值的方法 需求是这样的: 使用GridView绑定数据源显示数据,然后其中的价格和报价总数要窗体一加载就是编辑模式,并且修改里面的值点击保存更改可以成 ...

  3. ASP.NET2.0中用Gridview控件操作数据

    在ASP.NET 2.0中,加入了许多新的功能和控件,相比asp.net 1.0/1.1,在各方面都有了很大的提高.其中,在数据控件方面,增加了不少控件,其中的Gridview控件功能十分强大.在本文 ...

  4. 扩展GridView控件(7) - 行的指定复选框选中时改变行的样式

    GridView既强大又好用.为了让它更强大.更好用,我们来写一个继承自GridView的控件. [索引页] [×××] 扩展GridView控件(7) - 行的指定复选框选中时改变行的样式 作者:w ...

  5. 单击GridView控件,高亮单击所在的记录行

    看过下面博文的网友,也许都会觉得有点遗憾,就是很难知道自己点击的是哪一记录行. http://www.cnblogs.com/insus/p/3211017.html 针对这个问题Insus.NET再 ...

  6. GRIDVIEW控件删除数据前如何给予客户端提示

    在.net 2.0 中,GRIDVIEW控件有个GridView.RowDeleting 事件 ,我想在客户端删除数据前给予提示,弹出比如"确定删除吗?"的提示,并且根据用户的选择 ...

  7. 在 GridView 控件中添加一列复选框51

    简介 在前面的教程中 , 我们学习了如何为 GridView 控件添加一列 单选 按钮来选择一个特定的记录.当用户被限制最多只能从网格中选中一项时,一列单选按钮是一个非常恰当的用户界面.然而,有时我们 ...

  8. 演练GridView控件显示目录图片

    本博文,将带你学习使用GridView控件显示站点目录的图片.如果你已经学会怎样做图片缩略图:怎样应用接口来实现统一的属性,方法或函数:怎样动态加载用户控件,等等.就不必往下看了.因为此篇博文就是演练 ...

  9. 扩展GridView控件——为内容项添加拖放及分组功能

    引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用."Tiles ...

最新文章

  1. matlab 取消figure显示时在屏幕最前
  2. python智能办公系统_用 Python 自动化办公能做到哪些有趣或有用的事情?
  3. what is IOC
  4. Apollo进阶课程㉘丨Apollo控制技术详解——基于模型的控制方法
  5. 【Flink】Flink 报错 Writing records to streamload failed
  6. Xcode7 无账号真机测试!!
  7. android double值排序,android根据Double类型数据经纬度算出距离再根据距离实现排序功能...
  8. java生成32位id,java中生成32位随机ID
  9. 无线通信基础知识14:数字通信之调制
  10. 三维地震数据segy数据显示
  11. 字符串(昵称)过滤特殊符号和表情(通用)
  12. 路由器上网功能正常但加载不出图片的解决办法
  13. Git(2)-Git常用的操作和概念
  14. 将centos7打造成桌面系统
  15. 使用Comsol完成固体火箭装药的燃面推移
  16. 特殊古典加密方法解密实践
  17. R语言中的函数5:purrrmap()
  18. Java/JavaScript有哪些图形图像处理的框架?
  19. SSRF漏洞详解 一文了解SSRF漏洞
  20. 引用字体图标的方法(iconfont)

热门文章

  1. [码海拾贝 之JS] JS 之删除数组中的元素
  2. Mysql Docker 主从配置
  3. linux 内核 ide,Linux设备驱动程序学习(7)-内核的数据类型
  4. 简单的dp(dp专题)
  5. flink Sql查询异常NoResourceAvailableException: Could not acquire the minimum required resources
  6. log4j不打印日志
  7. Could not create a validated object, cause: ValidateObject failed
  8. mysql 查询姓王_MySQL查询语句练习题,测试足够用了
  9. matlab条形指纹拼接,matlab实现的两幅指纹图像的拼接
  10. mysql 服务已经存在_windows下mysql主从同步时从服务器出现表已经存在解决办法