熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

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

2013-11-15 12:51:31  來源: ASP編程 

  if(( data == True)||(data == true)){boxChecked = true;}

  break;

  default:break;

  }

  }

  }

  // <summary>

  // 定義控件的屬性readOnly

  // </summary>

  private bool readOnly = true;

  }

  類CheckBoxColumn繼承於模板列TemplateColumn它實現DataGrid控件中僅包含CheckBox控件的模板列CheckBoxColumn模板列CheckBoxColumn實現兩種模板列即只讀的模板列和可編輯的模板列它們分別由構造函數CheckBoxColumn(String Name)和CheckBoxColumn(bool Immediate PostbackString Name)實現類CheckBoxColumn中的構造函數都創建一個子項CheckBoxItem並根據模板列的屬性設置子項的名稱和是否為只讀屬性類CheckBoxColumn還定義了子項的事件CheckedChanged該事件在子項中的控件CheckBox的選擇項改變時觸發類 CheckBoxColumn定義了回傳屬性AutoPostBack數據域屬性DataField類CheckBoxColumn的程序代碼如下

  public class CheckBoxColumn :SystemWebUIWebControlsTemplateColumn

  {

  // <summary>

  // 初始化CheckBoxColumn

  // </summary>

  public CheckBoxColumn(String Name)

  {

  //設置控件為只讀

  viewItem = new CheckBoxItem(falseName); // SAW was false

  thisItemTemplate = viewItem as ITemplate;

  //設置控件為可編輯的

  editItem = new CheckBoxItem(trueName);

  thisEditItemTemplate = editItem as ITemplate;

  }

  // <summary>

  // 初始化CheckBoxColumn並設置控件的回傳屬性

  // </summary>

  public CheckBoxColumn(bool ImmediatePostbackString Name)

  {

  //設置控件為只讀

  viewItem = new CheckBoxItem(ImmediatePostbackName);

  thisItemTemplate = viewItem as ITemplate;

  //設置控件為可編輯的

  editItem = new CheckBoxItem(trueName);

  thisEditItemTemplate = editItem as ITemplate;

  AutoPostBack = ImmediatePostback;

  }

  // <summary>

  // 設置控件CheckBoxColumn的事件

  // </summary>

[NextPage]

  函數GetString(DataGridItem containerLabel CheckMsgString Name)用來獲取控件myDataGrid中被選擇的子項顯示的文本並把獲取的文本添加到控件CheckMsg的屬性Text中函數GetString (DataGridItem containerLabel CheckMsgString Name)的程序代碼如下

  private void GetString(DataGridItem containerLabel CheckMsgString Name)

  { //獲取單個列的值

  Label tempLabel = (Label)containerFindControl(Name);

  if(tempLabel != null)

  { //設置控件CheckMsg的Text屬性的值

  CheckMsgText += tempLabelText;

  }

  }

  運行效果

  ()設置頁面TestCheckBoxaspx為應用程序的起始頁面按F鍵運行出現如圖所示的初始界面

  

  圖 頁面TestCheckBoxaspx的初始界面

  ()單擊頁面TestCheckBoxaspx中的【顯示消息】按鈕獲取並顯示myDataGrid控件中被選擇的子項中的所有文本此時頁面TestCheckBoxaspx如圖所示

  

  圖 顯示myDataGrid控件中被選擇的子項中的所有文本

  ()單擊頁面TestCheckBoxaspx中的myDataGrid控件中的第個CheckBox控件則控件CheckMsg顯示myDataGrid控件中該子項的所有顯示的文本如圖所示

  

[NextPage]

  row[column] = (i % == ) ? true:false;

  }

  else

  { //添加其他列的數據

  row[column] = columnColumnName + iToString();

  }

  }

  dataTableRowsAdd(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 senderEventArgs e)

  {

  //設置CheckBox控件的事件

  CheckMsgText = ;

  CheckBox box = (CheckBox) sender;

  if(boxChecked == true)

  {

  //獲取選擇的CheckBox控件所在的DataGridItem

  DataGridItem container = (DataGridItem) boxNamingContainer;

  //獲取每列的值

  GetString(containerCheckMsgName);

  GetString(containerCheckMsgType);

  GetString(containerCheckMsgData);

  }

  }

  單擊頁面TestCheckBoxaspx中的【顯示消息】按鈕觸發事件ShowMsg_Click(object sender SystemEventArgs e)該事件用來獲取myDataGrid控件中被選擇的子項中的所有文本並使用Label控件CheckMsg顯示獲取的文本事件 ShowMsg_Click(object sender SystemEventArgs e)的程序代碼如下

  private void ShowMsg_Click(object sender SystemEventArgs e)

  {

  CheckMsgText = ;

  foreach(DataGridItem container in myDataGridItems)

  { //獲取每列的值

  CheckBox cBox = (CheckBox)containerFindControl(MyBox);

  if(cBox != null)

  {

  if(cBoxChecked == true)

  { //獲取選中列的值

  GetString(containerCheckMsgName);

  GetString(containerCheckMsgType);

  GetString(containerCheckMsgData);

  }

  }

  }

  }

[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) boxNamingContainer;

  boxChecked = false;

  boxEnabled = (readOnly == true) ? false:true;

  //獲取數據

  string data =

  ((DataRowView) containerDataItem)[dataField]ToString();

  //獲取數據類型

  Type t = ((DataRowView)containerDataItem)DataViewTableColumns[

  dataField]DataType;

  if (dataLength>)

  {

  switch (tToString())

  { //設置控件的值

  case SystemBoolean:

[NextPage]

  ——此文章摘自《ASPNET網絡數據庫開發實例精解》定價 特價 詳細>>

  控件myDataGrid用來顯示數據控件ShowMsg用來獲取DataGrid控件中被選擇的子項中的所有文本控件CheckMsg用來顯示控件ShowMsg獲取的文本頁面TestCheckBoxaspx的設計界面如 圖所示

  

  圖 頁面TestCheckBoxaspx的設計界面

  頁面TestCheckBoxaspx的HTML設計代碼如下

  <%@ Page language=c# Codebehind=TestCheckBoxaspxcs

  AutoEventWireup=false Inherits=Example__TestCheckBox %>  AutoEventWireup=false Inherits=Example__TestCheckBox %>

  <HTML><HEAD><title>Example__使用ASPNET中的自定義控件</title></HEAD>

  <asp:DataGrid id=myDataGrid runat=server

  AutoGenerateColumns=False>  AutoGenerateColumns=False>

  <Columns>

  <asp:TemplateColumn HeaderText=名稱><ItemTemplate>

  <asp:Label ID=Name Runat=server Text=<%#

  DataBinderEval(ContainerDataItem Name) %>>

  </asp:Label>

  </ItemTemplate></asp:TemplateColumn>

  <asp:TemplateColumn HeaderText=類型><ItemTemplate>

  <asp:Label ID=Type Runat=server Text=<%#

  DataBinderEval(ContainerDataItem Type) %>>

  </asp:Label>

  </ItemTemplate></asp:TemplateColumn>

  <asp:TemplateColumn HeaderText=數據><ItemTemplate>

  <asp:Label ID=Data Runat=server Text=<%#

  DataBinderEval(ContainerDataItem 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]

  自定義控件是ASPNET中很重要的一部分使用它可以提高程序代碼的重用性即一個自定義控件在網頁自定義控件或控件的內部都可以再次使用本實例創建的復選框控件列CheckBoxColumn自定義控件也可以在網站的任何地方再次使用

  本實例介紹如何在ASPNET中創建自定義控件如何使用自定義控件以及如何在自定義控件中定義公開屬性和方法的實現方法

  .創建新ASPNET應用程序

  在Visual Studio NET 集成開發環境中創建新的ASPNET Web應用程序命名為Example__

  .創建自定義控件CheckBoxColumn

  在應用程序Example__中添加文件CheckItemcs和文件 CheckColumncs其中第一個文件定義類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 editablestring Name)

  {

  name = Name;

  readOnly = (editable==true)?false:true;

  }

  // <summary>

  // 實例化CheckBox控件並添加到容器中

  // </summary>

  // <param name=container>添加控件的容器</param>

  void ITemplateInstantiateIn(Control container)

  {

  //創建CheckBox控件

  CheckBox box = new CheckBox();

  //設置控件的屬性和事件

  boxID = name;

  boxDataBinding += new EventHandler(thisBindData);

  boxAutoPostBack = autoPostBack;

  boxCheckedChanged += new EventHandler(thisOnCheckChanged);

  containerControlsAdd(box);

  }

  // <summary>

  //定義控件的事件CheckChanged

  // </summary>

  public event EventHandler CheckedChanged;

[NextPage]

  .設計頁面TestCheckBoxaspx的事件和函數

  頁面TestCheckBoxaspx調用函數Page_Load(object sender SystemEventArgs e)初始化該函數調用函數AddColumnToDataGrid()和函數BindData()分別實現在myDataGrid控件添加一個 CheckBoxColumn模板列和綁定myDataGrid控件的數據函數AddColumnToDataGrid()在創建一個 CheckBoxColumn模板列時同時還設置該模板列的屬性DataField屬性HeaderText以及CheckBox控件的事件 CheckedChanged函數Page_Load(object sender SystemEventArgs e)AddColumnToData Grid()和BindData()的程序代碼如下

  private void Page_Load(object sender SystemEventArgs e)

  {

  AddColumnToDataGrid();

  BindData();

  }

  private void AddColumnToDataGrid()

  { //添加一列復選框

  CheckBoxColumn checkCol = new CheckBoxColumn(trueMyBox);

  checkColDataField = Boolean;

  checkColHeaderText = 復選框;

  //添加復選框的事件

  checkColCheckedChanged += new EventHandler(checkCol_CheckedChanged);

  //添加到myDataGrid控件中

  myDataGridColumnsAdd(checkCol);

  }

  private void BindData()

  {

  //綁定myDataGrid控件的數據

  myDataGridDataSource = CreateDataSource();

  myDataGridDataBind();

  }

  函數BindData()調用函數CreateDataSource()創建myDataGrid控件的數據源dataTable函數CreateDataSource()首先定義數據表對象dataTable並在dataTable對象中添加個數據列 DataColumn它們分別為NameTypeDataBoolean分別表示名稱類型數據和布爾型數據然後函數 CreateDataSource()通過for語句設置表對象dataTable中的數據函數CreateDataSource()的程序代碼如下

  private DataTable CreateDataSource()

  {

  //創建數據表及其列

  DataTable dataTable = new DataTable(MyData);

  dataTableColumnsAdd(new DataColumn(Nametypeof(string)));

  dataTableColumnsAdd(new DataColumn(Typetypeof(string)));

  dataTableColumnsAdd(new DataColumn(Datatypeof(string)));

  dataTableColumnsAdd(new DataColumn(Booleantypeof(bool)));

  //添加五行數據

  for(int i = ; i <; i++)

  { //添加一行數據

  DataRow row = dataTableNewRow();

  foreach(DataColumn column in dataTableColumns)

  { //添加CheckBox控件的數據

  if(columnDataType == typeof(bool))

  {

[NextPage]

  ——此文章摘自《ASPNET網絡數據庫開發實例精解》定價 特價 詳細>>

  public event EventHandler CheckedChanged

  {

  add

  { //添加事件

  viewItemCheckedChanged += value;

  editItemCheckedChanged += value;

  }

  remove

  { //移除事件

  viewItemCheckedChanged = value;

  editItemCheckedChanged = value;

  }

  }

  // <summary>

  // 定義控件的AutoPostBack屬性

  // </summary>

  public bool AutoPostBack

  {

  set{viewItemAutoPostBack = value;editItemAutoPostBack = value;}

  get{return viewItemAutoPostBack;}

  }

  // <summary>

  // 定義控件的DataField屬性

  // </summary>

  public string DataField

  {

  get{return viewItemDataField;}

  set{viewItemDataField = value;editItemDataField = value;}

  }

  // <summary>

  // 定義控件的viewItem

  // </summary>

  private CheckBoxItem viewItem;

  // <summary>

  // 定義控件的editItem

  // </summary>

  private CheckBoxItem editItem;

  }

  .設計頁面TestCheckBoxaspx

  把應用程序Example__的默認頁面WebFormaspx重命名為 TestCheckBoxaspx並在頁面上添加個DataGrid控件個Button控件和個Lable控件它們的名稱分別為 myDataGridShowMsg和CheckMsg


From:http://tw.wingwit.com/Article/program/ASP/201311/21761.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.