使用ASP.Net中的自定义控件

使用ASP.Net中的自定义控件,第1张

if(( data == True )||(data == true )){box Checked = true}

break

default:break

}

}

}

// <summary>

// 定义控件属性readOnly

// </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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11944182.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存