if(( data == True )||(data == true )){box Checked = true}
break
default:break
}
}
}
// <summary>
// </summary>
private bool readOnly = true
}
类CheckBoxColumn继承于模板列TemplateColumn 它实现DataGrid控件中仅包含CheckBox控件的模板列CheckBoxColumn 模板列CheckBoxColumn实现两种模板列 即只读的模板列和可编辑的模板列 它们分别由构造函数CheckBoxColumn(String Name)和CheckBoxColumn(bool Immediate Postback String Name)实现 类CheckBoxColumn中的构造函数都创建一个子项CheckBoxItem 并根据模板列的属性设置子项的名称和是否为只读属性 类CheckBoxColumn还定义了子项的事件CheckedChanged 该事件在子项中的控件CheckBox的选择项改变时触发 类 CheckBoxColumn定义了回传属性AutoPostBack 数据域属性DataField 类CheckBoxColumn的程序代码如下
public class CheckBoxColumn :System Web UI WebControls TemplateColumn
{
// <summary>
// 初始化CheckBoxColumn
// </summary>
public CheckBoxColumn(String Name)
{
//设置控件为只读
viewItem = new CheckBoxItem(false Name)// SAW was false
this ItemTemplate = viewItem as ITemplate
//设置控件为可编辑的
editItem = new CheckBoxItem(true Name)
this EditItemTemplate = editItem as ITemplate
}
// <summary>
// 初始化CheckBoxColumn 并设置控件的回传属性
// </summary>
public CheckBoxColumn(bool ImmediatePostback String Name)
{
//设置控件为只读
viewItem = new CheckBoxItem(ImmediatePostback Name)
this ItemTemplate = viewItem as ITemplate
//设置控件为可编辑的
editItem = new CheckBoxItem(true Name)
this EditItemTemplate = editItem as ITemplate
AutoPostBack = ImmediatePostback
}
// <summary>
// 设置控件CheckBoxColumn的事件
// </summary>
[NextPage]函数GetString(DataGridItem container Label CheckMsg String Name)用来获取控件myDataGrid中被选择的子项显示的文本 并把获取的文本添加到控件CheckMsg的属性Text中 函数GetString (DataGridItem container Label CheckMsg String Name)的程序代码如下
private void GetString(DataGridItem container Label CheckMsg String Name)
{ //获取单个列的值
Label tempLabel = (Label)container FindControl(Name)
if(tempLabel != null)
{ //设置控件CheckMsg的Text属性的值
CheckMsg Text += tempLabel Text
}
}
运行效果
( )设置页面TestCheckBox aspx为应用程序的起始页面 按F 键运行 出现如图 所示的初始界面
图 页面TestCheckBox aspx的初始界面
( )单击页面TestCheckBox aspx中的【显示消息】按钮获取并显示myDataGrid控件中被选择的子项中的所有文本 此时页面TestCheckBox aspx如图 所示
图 显示myDataGrid控件中被选择的子项中的所有文本
( )单击页面TestCheckBox aspx中的myDataGrid控件中的第 个CheckBox控件 则控件CheckMsg显示myDataGrid控件中该子项的所有显示的文本 如图 所示
[NextPage]
row[column] = (i % == ) ? true:false
}
else
{ //添加其他列的数据
row[column] = column ColumnName + i ToString()
}
}
dataTable Rows Add(row)
}
//返回创建的数据表
return(dataTable)
}
单击myDataGrid控件中的CheckBox控件触发事件checkCol_CheckedChanged(object sender EventArgs e) 该事件首先获取myDataGrid控件当前子项显示的文本 最后使用Label控件CheckMsg显示获取的文本 事件checkCol_CheckedChanged(object sender EventArgs e)的程序代码如下
private void checkCol_CheckedChanged(object sender EventArgs e)
{
//设置CheckBox控件的事件
CheckMsg Text =
CheckBox box = (CheckBox) sender
if(box Checked == true)
{
//获取选择的CheckBox控件所在的DataGridItem
DataGridItem container = (DataGridItem) box NamingContainer
//获取每列的值
GetString(container CheckMsg Name )
GetString(container CheckMsg Type )
GetString(container CheckMsg Data )
}
}
单击页面TestCheckBox aspx中的【显示消息】按钮触发事件ShowMsg_Click(object sender System EventArgs e) 该事件用来获取myDataGrid控件中被选择的子项中的所有文本 并使用Label控件CheckMsg显示获取的文本 事件 ShowMsg_Click(object sender System EventArgs e)的程序代码如下
private void ShowMsg_Click(object sender System EventArgs e)
{
CheckMsg Text =
foreach(DataGridItem container in myDataGrid Items)
{ //获取每列的值
CheckBox cBox = (CheckBox)container FindControl( MyBox )
if(cBox != null)
{
if(cBox Checked == true)
{ //获取选中列的值
GetString(container CheckMsg Name )
GetString(container CheckMsg Type )
GetString(container CheckMsg Data )
}
}
}
}
[NextPage]// <summary>
// 设置控件的事件OnCheckChanged
// </summary>
private void OnCheckChanged(object sender EventArgs e)
{
if (CheckedChanged != null){CheckedChanged(sender e)}
}
// <summary>
//定义控件的属性Name
// </summary>
private string name
public string Name
{
get{return(name)}
set{name = value}
}
// <summary>
// 定义控件的属性DataField
// </summary>
private string dataField
public string DataField
{
get{return dataField}
set{dataField=value}
}
// <summary>
// 定义控件的属性AutoPostback
// </summary>
private bool autoPostBack = false
public bool AutoPostBack
{
set{autoPostBack = value}
get{return autoPostBack}
}
// <summary>
// 定义控件的数据绑定函数BindData()
// </summary>
private void BindData(object sender EventArgs e)
{
//找到CheckBox控件
CheckBox box = (CheckBox) sender
DataGridItem container = (DataGridItem) box NamingContainer
box Checked = false
box Enabled = (readOnly == true) ? false:true
//获取数据
string data =
((DataRowView) container DataItem)[dataField] ToString()
//获取数据类型
Type t = ((DataRowView)container DataItem) DataView Table Columns[
dataField] DataType
if (data Length>)
{
switch (t ToString())
{ //设置控件的值
case System Boolean :
[NextPage]——此文章摘自《ASP NET网络数据库开发实例精解》定价 ¥ 特价 ¥ 详细>>
控件myDataGrid用来显示数据 控件ShowMsg用来获取DataGrid控件中被选择的子项中的所有文本 控件CheckMsg用来显示控件ShowMsg获取的文本 页面TestCheckBox aspx的设计界面如 图 所示
图 页面TestCheckBox aspx的设计界面
页面TestCheckBox aspx的HTML设计代码如下
<%@ Page language= c# Codebehind= TestCheckBox aspx cs
AutoEventWireup= false Inherits= Example_ _ TestCheckBox %>AutoEventWireup= false Inherits= Example_ _ TestCheckBox %>
<HTML><HEAD><title>Example_ _ 使用ASP NET中的自定义控件</title></HEAD>
<asp:DataGrid id= myDataGrid runat= server
AutoGenerateColumns= False >AutoGenerateColumns= False >
<Columns>
<asp:TemplateColumn HeaderText= 名称 ><ItemTemplate>
<asp:Label ID= Name Runat= server Text= <%#
DataBinder Eval(Container DataItem Name ) %>>
</asp:Label>
</ItemTemplate></asp:TemplateColumn>
<asp:TemplateColumn HeaderText= 类型 ><ItemTemplate>
<asp:Label ID= Type Runat= server Text= <%#
DataBinder Eval(Container DataItem Type ) %>>
</asp:Label>
</ItemTemplate></asp:TemplateColumn>
<asp:TemplateColumn HeaderText= 数据 ><ItemTemplate>
<asp:Label ID= Data Runat= server Text= <%#
DataBinder Eval(Container DataItem Data ) %>>
</asp:Label>
</ItemTemplate></asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<asp:Button id= ShowMsg runat= server Text= 显示消息 ></asp:Button>
<asp:Label id= CheckMsg runat= server Width= %
ForeColor= Red >ForeColor= Red ></asp:Label>
</HTML>
[NextPage]自定义控件是ASP NET中很重要的一部分 使用它可以提高程序代码的重用性 即一个自定义控件在网页 自定义控件或控件的内部都可以再次使用 本实例创建的复选框控件列CheckBoxColumn自定义控件也可以在网站的任何地方再次使用
本实例介绍如何在ASP NET中创建自定义控件 如何使用自定义控件 以及如何在自定义控件中定义公开属性和方法的实现方法
.创建新ASP NET应用程序
在Visual Studio NET 集成开发环境中创建新的ASP NET Web应用程序 命名为Example_ _
.创建自定义控件CheckBoxColumn
在应用程序Example_ _ 中添加文件CheckItem cs和文件 CheckColumn cs 其中第一个文件定义类CheckBoxItem实现CheckBox控件 第二个文件定义类CheckBoxColumn 实现DataGrid控件中的CheckBoxColumn列 类CheckBoxItem继承于接口ITemplate 并在其中定义了标识控件名称的属性Name 标识控件数据域的属性DataField 标识控件是否为只读的属性ReadOnly 标识控件是否提交回传的属性 AutoPostBack和绑定控件数据的事件BindData() 当控件的选择项改变时触发的事件OnCheckChanged等 类 CheckBoxItem的程序代码如下
internal class CheckBoxItem : ITemplate
{
// <summary>
// CheckBoxItem的构造函数
// </summary>
// <param name= editable >控件是否为可编辑</param>
public CheckBoxItem(bool editable string Name)
{
name = Name
readOnly = (editable==true)?false:true
}
// <summary>
// 实例化CheckBox控件 并添加到容器中
// </summary>
// <param name= container >添加控件的容器</param>
void ITemplate InstantiateIn(Control container)
{
//创建CheckBox控件
CheckBox box = new CheckBox()
//设置控件的属性和事件
box ID = name
box DataBinding += new EventHandler(this BindData)
box AutoPostBack = autoPostBack
box CheckedChanged += new EventHandler(this OnCheckChanged)
container Controls Add(box)
}
// <summary>
//定义控件的事件CheckChanged
// </summary>
public event EventHandler CheckedChanged
[NextPage].设计页面TestCheckBox aspx的事件和函数
页面TestCheckBox aspx调用函数Page_Load(object sender System EventArgs e)初始化 该函数调用函数AddColumnToDataGrid()和函数BindData()分别实现在myDataGrid控件添加一个 CheckBoxColumn模板列和绑定myDataGrid控件的数据 函数AddColumnToDataGrid()在创建一个 CheckBoxColumn模板列时 同时还设置该模板列的属性DataField 属性HeaderText 以及CheckBox控件的事件 CheckedChanged 函数Page_Load(object sender System EventArgs e) AddColumnToData Grid()和BindData()的程序代码如下
private void Page_Load(object sender System EventArgs e)
{
AddColumnToDataGrid()
BindData()
}
private void AddColumnToDataGrid()
{ //添加一列复选框
CheckBoxColumn checkCol = new CheckBoxColumn(true MyBox )
checkCol DataField = Boolean
checkCol HeaderText = 复选框
//添加复选框的事件
checkCol CheckedChanged += new EventHandler(checkCol_CheckedChanged)
//添加到myDataGrid控件中
myDataGrid Columns Add(checkCol)
}
private void BindData()
{
//绑定myDataGrid控件的数据
myDataGrid DataSource = CreateDataSource()
myDataGrid DataBind()
}
函数BindData()调用函数CreateDataSource()创建myDataGrid控件的数据源dataTable 函数CreateDataSource()首先定义数据表对象dataTable 并在dataTable对象中添加 个数据列 DataColumn 它们分别为 Name Type Data 和 Boolean 分别表示名称 类型 数据和布尔型数据 然后函数 CreateDataSource()通过for语句设置表对象dataTable中的数据 函数CreateDataSource()的程序代码如下
private DataTable CreateDataSource()
{
//创建数据表及其列
DataTable dataTable = new DataTable( MyData )
dataTable Columns Add(new DataColumn( Name typeof(string)))
dataTable Columns Add(new DataColumn( Type typeof(string)))
dataTable Columns Add(new DataColumn( Data typeof(string)))
dataTable Columns Add(new DataColumn( Boolean typeof(bool)))
//添加五行数据
for(int i = i <i++)
{ //添加一行数据
DataRow row = dataTable NewRow()
foreach(DataColumn column in dataTable Columns)
{ //添加CheckBox控件的数据
if(column DataType == typeof(bool))
{
[NextPage]——此文章摘自《ASP NET网络数据库开发实例精解》定价 ¥ 特价 ¥ 详细>>
public event EventHandler CheckedChanged
{
add
{ //添加事件
viewItem CheckedChanged += value
editItem CheckedChanged += value
}
remove
{ //移除事件
viewItem CheckedChanged = value
editItem CheckedChanged = value
}
}
// <summary>
// 定义控件的AutoPostBack属性
// </summary>
public bool AutoPostBack
{
set{viewItem AutoPostBack = valueeditItem AutoPostBack = value}
get{return viewItem AutoPostBack}
}
// <summary>
// 定义控件的DataField属性
// </summary>
public string DataField
{
get{return viewItem DataField}
set{viewItem DataField = valueeditItem DataField = value}
}
// <summary>
// 定义控件的viewItem
// </summary>
private CheckBoxItem viewItem
// <summary>
// 定义控件的editItem
// </summary>
private CheckBoxItem editItem
}
.设计页面TestCheckBox aspx
lishixinzhi/Article/program/ASP/201311/21761实现方式:
1、水平布局一个TextView和一个ImageView(小黑箭头)
2、实现点击ImageView的单击事件,d出PopupWindow
3、PopupWindow中实现下拉列表
关键代码示例:
1、布局
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView/>
<ImageView />
</LinearLayout>
2、单击事件
image.setBackgroundResource(R.drawable.gerendang_jiantou)
image.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//d出popupwindow
}
})
3、pupupwindow相关代码
ListView lv = new ListView(this)
adapter = new OptionsAdapter(context, datas)// 根据数据,设置下拉框显示
list.setAdapter(adapter)
/**
* 两种不同长度的下拉框,主要是为了适应屏幕的大小
*/
if (p_width >0) {
pWindow = new PopupWindow(v, par.getWidth(), 150)
} else {
pWindow = new PopupWindow(v, par.getWidth(), 300)
}
pWindow.setFocusable(true) //能够焦点获得
pWindow.setBackgroundDrawable(new BitmapDrawable()) //设置背景
pWindow.setOutsideTouchable(true) //外部点击关闭
pWindow.update() //更新位置
像定义属性一样,类型为TNotifyEvent。如
private
FMyEvent: TNotifyEvent
public
MyEvent: TNotifyEvent read FMyEvent write FMyEvent
在你需要触发事件的地方调用以下代码:
if Assinged(FMyEvent)
FMyEvent(Self)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)