ListView揭秘(友情链接):(假设本来有4条数据)
如果数据库里有数据:若要进入界面,首先要先执行ListView1_ItemDataBound进行数据绑定到ListView,数据库中有多少条数据就绑定(执行这个方法)多少次。如果数据库没有数据,就会直接进入页面,不执行这个方法。
如果点击了”插入”: ListView1_ItemInserting执行一遍后转向ListView1_ItemDataBound执行5遍
如果点击了”更新”: ListView1_ItemUpdating执行一遍后转向ListView1_ItemDataBound执行5遍
如果点击了“删除“: 数据库里还剩多少条数据,就会执行多少遍ListView1_ItemDataBound,绑定到ListView。
可以看出ListView1_ItemDataBound就好像一个dataReader一样,从第一条数据开始往下读,一条条数据进行绑定。
/想要把ListView的数据和DropDownList的数据绑定,当DropDownList选择"文本"时,ListView的LinkType字段会被赋
值为"文本"
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)//如果e.Item的数据类型是展示类型(普通的类型)。
{
DropDownList ddLinkType = (DropDownList)e.Item.FindControl("ddLinkType");
ListViewDataItem lvDataItem = (ListViewDataItem)e.Item;
DataRowView rowView = (DataRowView)lvDataItem.DataItem;
if (ddLinkType != null && rowView != null)
{
var linksRow = (友情链接.DAL.DataSetLinks.T_LinksRow)rowView.Row;
ddLinkType.SelectedValue = linksRow.LinkType;
}
//应该直接写成下面那样就行了。这里是害怕第一次执行时,找不到DropDownList这个控和
//ListViewDataItem,因为这个是WebApplication,应该重新生成解决方案一下就可以。(我想的)
//var linksRow = (友情链接.DAL.DataSetLinks.T_LinksRow)rowView.Row;
//ddLinkType.SelectedValue = linksRow.LinkType;
}
}
// (显示转化)拿到DropDownList控件。(显示转化)拿到ListViewDataItem,即拿到一行的数据。显示转化为DataRowView。
//再把DataRow的行转化为数据集中的行。从而能够把数据库中的数据绑定到DropDownList中
//如果有DropDownList这个控件和DataRowView这项(也即是ListViewDataItem),然后进行绑定。
protected void ListView1_ItemInserting(object sender, ListViewInsertEventArgs e)
{
DropDownList ddLinkType = (DropDownList)e.Item.FindControl("ddLinkType");
e.Values["LinkType"] = ddLinkType.SelectedValue;
}
protected void ListView1_ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
DropDownList ddLinkType = (DropDownList)ListView1.Items[e.ItemIndex].FindControl("ddLinkType");
e.NewValues["LinkType"] = ddLinkType.SelectedValue;
}
}
ListViewItem对象呈现ListView控件。
ItemCreated事件,在ListView中创建一个项。
若要呈现 ListView 控件,必须先将该控件中的每个项都绑定到数据源中的一个记录。 将一个项(用 ListViewItem 对象表示)绑定到 ListView 控件中的数据时,将引发 ItemDataBound 事件。
e是ListViewItemEventArgs对象,可理解为:传递当前ItemDataBound事件。
e可理解为拿到一行。
e.Item 是一行中的所有数据。
e.Item.Type 数据项的类型。这个类型可分为三类(即ListViewItemType有三种类型)。DataItem,EmptyItem,InsertItem。
这里的e.Item.Type 是DataItem类型。(可理解为展示类型)