日期:2012-05-17  浏览次数:20497 次

文章译自在工作过程中遇到的实际问题,而查的MSDN,当时没有找到中文资料,网上关于此方面的实用的资料也不多,有心收集下来并翻译,在此与大家交流,欢迎批评指正:zyfly0808@hotmail.com


内容——

序言:Windows窗体&Web窗体中的DataGrid控件

①.控制列的宽度、高度和对齐方式。

②.制定列的显示和编辑模式外观。

③.格式化日期、货币和其它数据。

④.动态显示和隐藏列。

⑤.动态增加列。

⑥.用DataGrid控件向数据源添加一条记录。

⑦.在编辑模式下显示一个下拉列表。

⑧.用CheckBox选择多个Items.

⑨.一次编辑多行。

⑩.单击任何地方选中该行。


简介







DataGrid服务器控制是从数据源显示信息的强有力的工具,使用简单。你可以只通过设定一些属性就可以显示可编辑的数据,并且使其具有专业的外观,同时,它还具有非常复杂的对象模型,为你展示数据提供了很大的灵活性。







这篇文章重点讲解了在NewsGroup网络和其它的开发人员的论坛里经常问到的关于制定DataGrid的显示的问题。这里所讨论的有些问题是很简单的,但有时也有些令人迷惑,在这种情况下,他们提出了这一问题——如何掌握DataGrid控件的基本功能。







文章假设你已经熟悉该控件——怎样将它添加到一个窗体以及如何设置它来显示数据。你还要知道怎样将它的一行变成可编辑模式和其它的基本任务。最终,你将会发现掌握如何使用模板——向DataGrid中添加模板列以及在模板中展示控件——是十分有帮助的。








序言:Windows窗体&Web窗体中的DataGrid控件。







Web窗体中的DataGrid控件并不是Windows窗体中该控件的等价物,通常认为它们是同一种控件,至少具有相同的功能。但是,Web窗体的整个编程Paradigm和Windows窗体有着很大的不同,举个例子来说,Web窗体页面的每一次处理过程都要回传到服务器,它们必须维护状态,而且具有非常不同的数据绑定模型,如此等等。







正是由于这些不同,使得它们在各自的控件方面也有着很大的差异,包括
DataGrid控件,一般来说,Web窗体DataGrid控件的内置属性要少一些,下面列出了几个不同之处:
①.不继承支持主——从数据结构。

②.和其它Web服务器控件一样,它不支持双向的数据绑定。如果你想更新数据,必须要自己写代码。

③.一次只能编辑一行。

④.并不继承性也支持排序,尽管你可以通过处理它激发的事件来对网格的内容排序。

另一方面:

①.你可以将Web窗体DataGrid控件绑定到任何支持IEnumerable接口的对象上。

②.Web窗体DataGrid控件支持分页。

③.与Windows窗体DataGrid相比,我们更容易规范Web窗体DataGrid的外观和数据的输出。







一.控制列宽度、高度和对齐公式。

默认情况下,DataGrid控件自动调整行和列,使它们适应你指定给它的全部

的高度和宽度。在全部宽度内,它根据列头的文本来控制列的宽度。所有数据默

认都是左对齐的。









为控制列的特性,应该关闭“自动生成列”属性——将AutoGenerateColumns属性置为False.在实际的使用中,只有在短期应用,如快速浏览页面或者演示的时候,才将该属性设为True.对于生成应用程序而言,你应该默认添加列,每个列可以是绑定列或者模板列。

为了控制某个列的宽度,可以为该列产生一个样式元素(style-element)然后
将元素的宽度属性设为标准单位,下面给出了一个项样式的width属性设置
的HTML代码:
将元素的宽度属性设为标准单位,下面给出了一个项样式的width属性设置
的HTML代码:


<asp: BoundColumn DataField=”title”SortExpression=”title”



<asp: BoundColumn DataField=”title”SortExpression=”title”


Header Text=”Title”>







<ItemStyle Width=”100px”></ItemStyle>







</asp:BoundColumn>







注:可以将ItemStyle-Width=”100px”写入Boundolumn中。







你可以使用样式元素设置对齐方式,将其设为“左”、“右”或者其它在“水平对齐”集合中定义的值(在VS中,每个单独的列对齐方式是可见的)







下面是一个例子:







<asp: BoundColumn DataField=”title” SortExpression=”title”







HeaderText=”Title”>







<ItemStyle Width=”100px”HorizontalAlign=”Right”></ItemStyle>







</asp:BoundColumn>







你还可以使用样式元素设定列的高度,你很可能会觉得这没有设定宽度灵活,因为设定某一列的高度也就设定了全部列的高度。







你也可以在运行时通过代码设定宽度,采取这种方式的一个例子就是ItemGreated事件句柄,下面的例子将前两列分别设定为100和50像素。







//C#







Private void DataGrid-ItemCreated(object sender,







System.Web.UI.WebControls.DataGridItemEventArgs e)







{







e.Item.Cells[0]Width=new Unit(100);







e.Item.Cells[1].Width=new Unit(50);







}







当然,将这些可以在设计时就设置好的宽度值通过代码来设置几乎没有任何意义。一般情况下,你可能只是想要基于运行时的值来设定宽度而采取这种方法,你可以将单元格控件的宽度设为标准的单位(往往是像素)。但是,它并不直接将这些长度数据转化为像素——这些仅仅是字符数。然而,当你创建一个项的时候,可以使用这些数据来检查。