关闭

VS2005 DataGridView 和 GirdView 横向大比拼

600人阅读 评论(0) 收藏 举报

VS2005 DataGridView 和 GirdView 横向大比拼

一: 添加数据到 DataGridView ,GridView 默认情况下让他们自动生成列:
DataGridView 有序的将数据显示出来,就象Excel 表格一样..当某一列超出范围的时候,多余的用...代替,也可以调整列的宽度,让数据全部显示出来
GridView以最大化的方式将数据全部显示出来,不足的是,当某一列的数据,超出范围的时候,他会换行,即使设置为不换行,整个页面的布局就被破坏了..
由于DataGridView ,GridView 默认生成的列表头 都是英文的,所以通常需要绑定列:

添加列时候, DataGridView 默认是左对齐的, 添加列对话框只是添加了 列的名字 和 表头, 还要在编辑列对话框 绑定数据
 而 GridView 数据对齐方式,是根据控件的对齐方式,如 GridView 左对齐,则 表头和数据行都是左对齐的.,添加列的时候,默认为数据绑定列和 表头,所以一步到位...

目前要解决的问题 :DataGridView 暂无,GridView 数据超出的时候,该怎么办 ?
 
首先在 GridView 数据一栏有一个 属性 DataFormatString ,我们知道通常是用来设置列的样式的 如{0:yyyy-MM-dd}如果那一类是时间,显示出来就只有 年,月,日..我们能不能让他 在数据超出范围的时候,截取,并用...代替呢 ?
======以下介绍 DataFormatString
使用 DataFormatString 属性来提供列中各项的自定义格式。
数据格式字符串由以冒号分隔的两部分组成,形式为 { A : Bxx }。例如,格式化字符串 {0:F2} 将显示带两位小数的定点数。

整个字符串必须放在大括号内,表示它是格式字符串,而不是实际字符串。大括号外的任何文本均显示为实际文本。
  [小知识点] 如果 我们这样写,有什么效果呢 ? {0:F2}% ,显然,如前面 所示,列正常显示出来,只不过 在每一列的数据后面多加了一个 %

冒号前的值(常规示例中为 A)指定在从零开始的参数列表中的参数索引
注意
此值只能设置为 0,因为每个单元格中只有一个值。

C
 以货币格式显示数值。 $ {0: C0}{0: C1}{0: C2} C后面的小数代表你要 显示的小数位数
D
 以十进制格式显示数值。 {0:d0}{0:d1}对整数来说,效果一样,{0:d2}{0:d3}...的后面的小数就代表数据前面的0 如 01 02 001 002

F
 以固定格式显示数值。 {0:f}默认为带2个小数点的小数. {0:f0} {0:f1} {0:f2}  后面的小数代表你要 显示的小数位数

N
 以数字格式显示数值。  和上面大同小...
X
 以十六进制格式显示数值。  以及 P 代表 %

除 X 以指定的大小写形式显示十六进制字符之外,其他格式字符不区分大小写 所以 {0:c} 和{0:C} 效果一样
===============
 以上是一些常用的格式,也许你会很兴奋,终于可以小试伸手了,设置了不同的样式之后,数据都没有变化,这时你会奇怪,怎么回事,
因为还有一个 属性你忘了  HtmlEncode="False" 否则是显示不出效果的...这个属性将在后面介绍...
===============
  我们发现,他并没有内置的格式来 控制超出的字符串..如果用自定义格式化字符串,太麻烦了  ,如果让 GridView 不能换行,超出的字符串被截断,然后 设置格式换字符串  {0:f}....我们 也未能发现有控制长度的格式..
  实在没有办法了,就只好 再数据绑定之后,用 循环 去遍历截取...

 现在介绍第三种方法..将那一个列放在 模板列 里面,他享有和其他列同样的数据源{这个是我以前没有想到的}
  <asp:TemplateField HeaderText=" 内容 ">                                    
                                     <ItemStyle HorizontalAlign="Center" />
                                     <HeaderStyle HorizontalAlign="Center" Width="15%" />
                                     <ItemTemplate>
                                         <%# CutString(Convert.ToString(Eval("Content")), 20)%>
                                     </ItemTemplate>
                               </asp:TemplateField>
后台代码中
 if (str.Length > len)
        {
            return str.Substring(0, len) + "...";
        }
        else
        {
            return str;
        }
========这样 GridView 超出字符串的问题 我们就解决了..
DataGridView 绑定数据之后,控件是活动的..而GridView 绑定之后,控件是死的...不再需要设置..

现在 我们要解决的如何 设置 DataGrid 样式,以适应企业级开发.

DatagridView :

一 :
将数据绑定到 DataGridView 控件非常简单和直观,在大多数情况下,只需设置 DataSource 属性即可。
在绑定到包含多个列表或表的数据源时,只需将 DataMember 属性设置为指定要绑定的列表或表的字符串即可。

二:数据源的定义

任何实现 IList 接口的类,包括一维数组。
任何实现 IListSource 接口的类,例如 DataTable 和 DataSet 类。
任何实现 IBindingList 接口的类,例如 BindingList 类。
任何实现 IBindingListView 接口的类,例如 BindingSource 类。

三:BindingSource 组件: 取代 DataSet 和 DataView 是喜还是优..

通常绑定到 BindingSource 组件,并将 BindingSource 组件绑定到其他数据源或使用业务对象填充该组件。
BindingSource 组件为首选数据源,因为该组件可以绑定到各种数据源,并可以自动解决许多数据绑定问题实际项目当中通常要注意的属性:

 BindingSource 组件有两个用途。首先,它提供一个将窗体上的控件绑定到数据的间接层。这是通过将 BindingSource 组件绑定到数 据源,然后将窗体上的控件绑定到 BindingSource 组件来完成的。与数据的所有进一步交互(包括导航、排序、筛选和更 新)都是通 过调用 BindingSource 组件来完成的。

 使用 BindingSource 筛选数据
将 Filter 属性设置为所需的表达式。
在下面的代码示例中,表达式就是在列名之后加上该列所需的值。
BindingSource1.Filter = "ContactTitle='Owner'"

 用 BindingSource 进行数据排序
将 Sort 属性设置为后面要跟有 ASC 或 DESC 的所需列名称,以指示是按升序还是降序排序。
用逗号分隔多个列。
BindingSource1.Sort = "Country DESC, Address ASC";

===在基于文本的单元格中启用换行
this.dataGridView1.DefaultCellStyle.WrapMode =
    DataGridViewTriState.True;
===设置货币和日期值的格式
this.dataGridView1.Columns["UnitPrice"].DefaultCellStyle.Format = "c"; 货币
this.dataGridView1.Columns["ShipDate"].DefaultCellStyle.Format = "d"; 短日期
====
在实际项目当中 只需要注意这几个 属性 就可以了..
AllowUserToAddRows   指示是否向用户显示用于添加行的选项.
ColumnHeadersHeight  和 ColumnHeadersHeightSizeMode 配合使用..用于设置列的高度
RowHeadersVisible    指示是否显示包含行标题的列
SelectionMode        指示如何选择 DataGridView 的单元格
AllowUserToResizeRows  指示用户是否可以调整行的大小
BackgroudColor       DataGridView 的背景色
ReadOnly      DataGridView 是否只读
EditMode   表示确定单元格编辑启动方式的模式
AutoSizeRowsMode  确定可见行的自动调整大小模式
AllowUserToDeleteRows 指示是否允许用户从DaaGridView 删除行
ColumnHeaDefaultCellStyle 默认的列标题样式

RowHeadersWidthSizeMode 确定调整行标头宽度的行为
GridColor               分隔DataGridView 单元格的网格线的颜色

绑定方式 :

1.自动生成列  2. 绑定列 [可见,只读,冻结]

对某列 设置冻结之后. Frozen =True,以它为起点向左的列都会受影响
如 A B C D E 5 列 将 E 设置 Frozen =True  A B C D 的 Frozen 属性会自动设置为 True  无横向滚动条..且优先 ScrollBars
将 B 列设置为 冻结之后..A B 列不动.拖动横向滚动条的时候,,C D E 移动.好像是 2层 ...

如果是自动生成列..我们无话可说..如果是绑定列.如果你绑定字段 是 A 表.查询是B 表. 无结果.....
绑定列的时候,仍然会有自动创建的列..取消自动创建列的方法:
从程序角度 : 我们一般查询 都是用 * ..改成具体的列 就避免了多于的列自动生成..

然后获取当前行的某一列的值 : DataGridView1.CurrentRow.Cells[i].Value.ToString();

当一个页面上的 2个 DataGridView 绑定同样的数据时候,选中其中一个 DataGridView 的某一行的时候,另外一个 DataGridView也会选中


     this.dataGridView1.AllowUserToAddRows = false;
            this.dataGridView1.AllowUserToResizeRows = false;
            this.dataGridView1.BackgroundColor = System.Drawing.Color.White;


            this.dataGridView1.ColumnHeadersHeight = 25;
            this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
          
            this.dataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnKeystroke;
            this.dataGridView1.Location = new System.Drawing.Point(12, 12);
            this.dataGridView1.MultiSelect = false;
            this.dataGridView1.Name = "dataGridView1";
            this.dataGridView1.ReadOnly = true;
            this.dataGridView1.RowHeadersVisible = false;
            this.dataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
            this.dataGridView1.RowTemplate.Height = 23;
            this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
            this.dataGridView1.ShowCellErrors = false;
            this.dataGridView1.ShowEditingIcon = false;
            this.dataGridView1.ShowRowErrors = false;
            this.dataGridView1.Size = new System.Drawing.Size(463, 278);
            this.dataGridView1.TabIndex = 0;
=================以上问题解决后,马上就要介绍 2着传参数的问题==
GridView 中有一个 HypeLinkField 通过设置 DataNavigateUrlFields 和 DataNavigateUrlForamtString属性 来 转发页面,并带有参数
如果只是需要 转发页面就设置 NavigateUrl就可以了
 假如我使用的是 模块列,  NavigateUrl='<%# "~/Default2.aspx?ID="+Convert.ToString(Eval("TaskDesciption"))%>'

DataGridView 就不象 GridView,我们很少用到 添加列,都是通过鼠标 单击,双击,或者右键菜单来直接操作当前行的..

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:384590次
    • 积分:7169
    • 等级:
    • 排名:第3106名
    • 原创:325篇
    • 转载:71篇
    • 译文:1篇
    • 评论:34条
    最新评论