一、DataGrid 整体介绍
Datagrid类似于数据库的表格
记录集由行集(items)和列集(columns)组成
行集由多个datagridColumn组成
列集由多个datagriditem组成
datagridColumn有: BoundColumn:文本字段标准显示,当处于编辑状态,将显示为TextBox
HyperLinkColumn:显示文本数据,同时是一个URL超链接
ButtonColumn:按钮列,包括:
选择按钮 后台事件,可改变选中行的颜色
删除按钮 deleteCommand事件
更新按钮 updateCommand事件
编辑按钮 editCommand事件
普通按钮 itemCommand事件
TemplateColumn:模版列,完全控制哪些控件显示给用户;分为多种模版,如图
HeaderTemplate 用于对页眉的自定义操作
ItemTemplate 项模版,用于显示自定义数据
EditItemTemplate 编辑模版,即:当控件处于编辑状态时,该单元处于哪种状态。
FooterTemplate 用于对页脚的自定义操作
行类型:ListItemType:Header Footer Item AlternatingItem SelectedItem EditItem Separastor Pager
三个重要事件:
itemCommand 来获取控件事件
ItemCreated
ItemDataBound
二、如何引用DataGrid中的控件:
(一般在ItemCreated或ItemDataBound事件中引用)
对于非模版列:用datagriditem.Cells[第几个单元格].Controls[第几个控件]获得
下标从0开始
可以转换成相应的控件,如:
boundColumn: Label EditColumn: TextBox LinkColumn:DataGridLinkButton …
对于模版列:用datagriditem.findcontrol[“控件名称”] 获得
DataBinding:只要执行了DataBind方法,
就会马上激发这个事件。
ItemDataBound将数据存放于该“行容器”中
(数据绑定)。依次循环
如要在创建时手工添加自定义控件
(不使用模版列),则需要
在ItemCreated事件中绑定
三、DataGrid Item 构建行的流程
(itemcreated)
四、DataGrid绑定事件的常见问题
引用e.Item.DataItem 报错“对象不能为null ”
原因:没有在itemcreated和itemdatabound下判断行类型.
(DataRowView)(e.Item .DataItem) 只有在:
item行、AlternatingItem行、selecteditem行、edititem行才有值
数据绑定完之后如何访问某行数据?
可以使用datagriditem来搜索,代码结构如下:
for each (datagriditem dgi in Datagrid1.items)
{ }
切记:不可用dgi.dataitem 来访问
因为在itembound之后已重新为null
五、使用ItemCreated事件注意事项
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item)
{
//此处添加对类型为Item的代码,
}
}
当加载、修改行属性或者行内的控件属性时,应该判断ItemType类型,因为每个单元格均有不同的项类型的呈现方式