ASP.NET 3.5 Framework 的ListView控件比起ASP.NET 2.0 Framework的GridView控件好用多了。
本文针对ListView控件的ItemCreated事件和ItemDataBound事件举例子做出相应的解释。
ListView是ASP.NET 3.5 Framework中给出的又一个新控件,比起ASP.NET 2.0 Framework的GridView来,又方便了不少。
在这里,我对自己开发过程中使用ListView控件的一些心得讲述一下。
ListView的诸事件中的ItemCreated事件和ItemDataBound事件有如下区别:
1.ItemCreated事件发生在ItemDataBound事件之前
2.ItemCreated事件所做的工作是初始化各个模板Template中的控件。
3.ItemDataBound事件在ItemCreated初始化控件后再对需要进行数据绑定的控件进行绑定。
4.要动态的为ListView添加控件,必须在ItemCreated事件期间进行。
5.要去的ListView动态控件的绑定值,必须在ItemDataBound事件期间进行。
例子:
用ListView列出所有的用户和所有的权限。权限用CheckBoxList来表示。点击相应的权限就做出修改。
前台代码:(控件)
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RolesManage.ascx.cs" Inherits="Web.control.RolesManage" %>
<asp:ListView ID="ListView1" runat="server" DataKeyNames="ProviderUserKey"
DataSourceID="ODS"
onpagepropertieschanged="ListView1_PagePropertiesChanged"
onpagepropertieschanging="ListView1_PagePropertiesChanging"
onitemcreated="ListView1_ItemCreated"
onitemdatabound="ListView1_ItemDataBound">
<LayoutTemplate>
<table runat="server">
<tr runat="server">
<td runat="server">
<table ID="itemPlaceholderContainer" runat="server" border="0" style="">
<tr runat="server" style="">
<th runat="server">
UserName</th>
<th runat="server">
ProviderUserKey</th>
<th></th>
</tr>
<tr ID="itemPlaceholder" runat="server">
</tr>
</table>
</td>
</tr>
<tr runat="server">
<td runat="server" style="">
<asp:DataPager ID="DataPager1" runat="server" PageSize="5">
<Fields>
<asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True"
ShowNextPageButton="False" ShowPreviousPageButton="False" />
<asp:NumericPagerField />
<asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True"
ShowNextPageButton="False" ShowPreviousPageButton="False" />
</Fields>
</asp:DataPager>
</td>
</tr>
</table>
</LayoutTemplate>
<EmptyDataTemplate>
<table runat="server" style="">
<tr>
<td>
No data was returned.</td>
</tr>
</table>
</EmptyDataTemplate>
<ItemTemplate>
<tr style="">
<td>
<asp:Label ID="UserNameLabel" runat="server" Text='<%# Eval("UserName") %>' />
</td>
<td>
<asp:Label ID="ProviderUserKeyLabel" runat="server"
Text='<%# Eval("ProviderUserKey") %>' />
</td>
<td>
<asp:PlaceHolder ID="pl" runat="server"></asp:PlaceHolder>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
<asp:Label ID="lbMsg" runat="server"></asp:Label>
<asp:ObjectDataSource ID="ODS" runat="server"
SelectMethod="GetAllUsers" TypeName="SQLServerDAL.User"
EnablePaging="True" MaximumRowsParameterName="pageSize"
onselecting="ODS_Selecting" SelectCountMethod="GetUsersCount"
StartRowIndexParameterName="pageIndex">
<SelectParameters>
<asp:Parameter Name="pageIndex" Type="Int32" />
<asp:Parameter Name="pageSize" Type="Int32" />
<asp:Parameter Direction="Output" Name="totalRecords" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
后台代码:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
namespace Web.control
{
public partial class RolesManage : System.Web.UI.UserControl
{
private int pageIndex;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
}
protected void ODS_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
if (!e.ExecutingSelectCount)
{
e.Arguments.MaximumRows = 5;
e.Arguments.StartRowIndex = (pageIndex +1)/5;
}
}
protected void ListView1_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
{
}
protected void ListView1_PagePropertiesChanged(object sender, EventArgs e)
{
pageIndex = ((DataPager)ListView1.FindControl("DataPager1")).StartRowIndex ;
ODS.DataBind();
}
protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
string[] roles = System.Web.Security.Roles.GetAllRoles();
PlaceHolder ph = (PlaceHolder)e.Item.FindControl("pl");
Label lbProviderUserKeyLabel = (Label)e.Item.FindControl("ProviderUserKeyLabel");
Control c = ParseControl(string.Format("<asp:CheckBoxList id='{0}' runat='server' />", "cbl1"));
ph.Controls.Add(c);
CheckBoxList cbl = (CheckBoxList)e.Item.FindControl("cbl1");
cbl.RepeatDirection = RepeatDirection.Horizontal; //水平显示
cbl.AutoPostBack = true;
cbl.DataSource = roles;
cbl.SelectedIndexChanged += new EventHandler(this.OnCblSelected);
}
}
protected void OnCblSelected(object sender, EventArgs e)
{
CheckBoxList cbl = (CheckBoxList)sender;
lbMsg.Text = cbl.ToolTip + "现在拥有以下角色:";
ArrayList cblList = new ArrayList();
foreach (ListItem l in cbl.Items)
{
if (l.Selected)
{
cblList.Add(l.Text);
if (!DALFactory.DataAccess.GetRolesInstance().IsUserInRole(DALFactory.DataAccess.GetUserInstance().GetUser(cbl.ToolTip).UserName, l.Text))
{
DALFactory.DataAccess.GetRolesInstance().AddUserToRole(DALFactory.DataAccess.GetUserInstance().GetUser(cbl.ToolTip).UserName, l.Text); //添加用户的角色
}
}
else
{
if (DALFactory.DataAccess.GetRolesInstance().IsUserInRole(DALFactory.DataAccess.GetUserInstance().GetUser(cbl.ToolTip).UserName, l.Text))
{
DALFactory.DataAccess.GetRolesInstance().RemoveUserFromRole(DALFactory.DataAccess.GetUserInstance().GetUser(cbl.ToolTip).UserName, l.Text); //移除用户的角色
}
}
}
foreach (String s in cblList)
{
lbMsg.Text += s+"、";
}
lbMsg.Text = lbMsg.Text.Substring(0, lbMsg.Text.LastIndexOf("、")); //截去最后的"、"号
}
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
Label lbUserNameLabel = (Label)e.Item.FindControl("UserNameLabel");
CheckBoxList cbl = (CheckBoxList)e.Item.FindControl("cbl1");
cbl.ToolTip = lbUserNameLabel.Text;
string[] roles = DALFactory.DataAccess.GetRolesInstance().GetRolesForUser(lbUserNameLabel.Text);
foreach (ListItem li in cbl.Items)
{
li.Selected = roles.Contains(li.Text);
}
}
}
}
}

浙公网安备 33010602011771号