程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP入門教程 >> ASP+學習筆記(二)

ASP+學習筆記(二)

編輯:ASP入門教程
5).Pagelet控件
    自己做控件最簡單的方法就是Pagelet控件,後綴為.ASPc,用Register指令包含到WebForm中:
    <%@ Register TagPRefix="Acme" TagName="Message" Src="pagelet1.ASPc" %>
    TagPrefix是Pagelet的名稱空間定義,TagName是給Pagelet取的名字。Src屬性是虛擬目錄。
    Pagelet的使用:
    <Acme:Message runat="Server"/>
    。暴露Pagelet的方法,像一個類一樣定義屬性,例:
    <script language="c#" runat="server">
    public String Address{
        get{
            return TxtAddress.Value;
        }
        set{
            TxtAddress.Value=value;
        }
    }
    </script>
    <input id="TxtAddress" runat="server">
    。封裝事件
    略
    可以看出,Pagelet可以取代include文件的作用。
    。編程創建Pagelet對象
    可以用程序生成Pagelet控件的實例,如:
    Control cl=LoadControl("pagelet2.ASPc");
    ((Pagelet2_ASPc)cl).Category="business";
    Page.Controls.Add(cl);
    注意,因為LoadControl函數返回一個System.Web.UI.Control對象,因此需要造型。Pagelet
的類型為文件名,點號換成下劃線。

6).數據幫定控件
    ASP+中,不僅可以幫定到數據庫,還可以幫定到簡單的屬性集合,甚至方法調用的結果,如:
    CustomerID: <%# custID %>
    <ASP:ListBox id="List1" datasource='<%# myArray %>' runat="server">
    <%# (Customer.FirstName + Customer.LastName)%>
    <%# GetBalance(CustID) %>
    看起來跟asp中的<%=%>一樣,但是ASP是用Response.Write來替換的,而ASP+則是在DataBind()
方法調用後才幫定的。數據幫定控件和Page對象都有DataBind()方法。
    注意,ASP+是強類型的,所以:
        <%# count.ToString() %>才對。
    。DataBinder.Eval()
    一個靜態方法,由ASP+支持,允許後幫定的數據幫定表達式,而且還可選地轉化為串,可以
用於模板。如不用Eval,則像:
    <%# String.Format("{0:c}",((DataRowVIEw)Container.DataItem)["SomeInteger"]) %>
    可以用Eval:
    <%# DataBinder.Eval(Container.DataItem,"someinteger","{0:c}") %>
    
7).服務器方數據訪問
    。連接、命令和數據集(DataSets)
    NGWS提供了一系列受管數據訪問API,引入名稱空間:
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SQL" %>
    a).生成SQLConnection
    b).構造SQLDatasetCommand
    c).FillDataSet
    如果是插入等操作,則用SQLCommand替換SQLDataSetCommand.
    記住:始終在用完連接後關閉連接!否則要等到頁面被釋放時才會被垃圾回收機制釋放資源。
    。幫定數據到DataGrid,例:
        ....
        DataSet ds = new DataSet();
        myCommand.FillDataSet(ds,"Authors");
        MyDataGrid.DataSource = ds.Tables["Authors"].DefaultVIEw;
        MyDataGrid.DataBind();
        
    。參數化查詢
        SQLDataSetCommand支持參數,"@"作為參數前綴,例:
        
        myCommand.SelectCommand.Parameters.Add(new SQLParameter("@state",SQLDataType.VarChar,2));
        myCommand.SelectCommand.Parameters["@state"].Value=newValue;
        
    注意,如果DataGrid要在客戶與服務器間輪轉的話,一定要把MaintainState屬性設置為false,
否則,性能受到影響,如:
    <ASP:DataGrid id="myDataGrid" runat="server"
    MaintainState="false"/>
    
    。插入數據
    應當保證不為null,可以使用try/catch塊。
    例:
    String insertcmd = "insert into Authors values(@id,@lname)"
    SQLCommand myc = new SQLCommand(insertcmd,myConn);
    myc.Parameters["@id"].Value=cu_id.Value;
    myc.Parameters["@lname"].Value=au_lname.Value;
    myc.ActiveConnection.Open();
    try{
        myc.Execute();
    }catch(SQLException e){
        if (e.Number==2627)
        ......//主鍵重復
        }
    myc.ActiveConnection.Close();
    
    。更新記錄
    DataGrid提供了一些內在支持,有一個整型屬性,EditItemIndex,表示哪一行可以編輯,一但設置,
該行的文本輸入框顯示,而不是卻省的靜態文本,如為-1則表示沒有行可以編輯。
    DataGrid可以包含一個控件,EditCommandColumn,它將為DataGrid引發三個事件,EditCommand,
UpdateCommand,和CancelCommand。EditCommandColumn在屬性中用Columns定義,如:
    <ASP:DataGrid id="MyDataGrid" runat="server"
    ......
    onEditCommand="MyDataGrid_Edit"
    onCancelCommand="MyDataGrid_Cancel"
    onUpdateCommand="MyDataGrid_Update"
    DataKeyFIEld="au_id"
    >
    <property name="Columns">
        <ASP:EditCommandColumns EditText="編輯" CancelText="取消" UpdateText="更新"/>
    </property>
    </ASP:DataGrid>
    
    Edit事件中參數DataGridCommandEventArgs參數包含了用戶選擇的行,然後我們可以重新幫定,
以刷新顯示。例:
    public void MyDataGrid_Edit(Object sender,DataGridCommandEventArgs E){
        MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex;
        BindGrid();//調用另外的函數實現重新幫定
    }
    
    在Cancel事件中,我們只需要把EditItemIndex設為-1就可以了。
    在Update事件中,我們需要更新數據。要知道當前行的主鍵值,這可以用剛才設的DataKeyFIEld
來獲得,我們可以獲得行的主鍵值,如:
    myCommand.Parameters["@id"].Value=MyDataGrid.DataKeys[(int)E.Item.ItemIndex];
    最後將EditItemIndex設為-1。
    為了防止用戶修改主鍵,可以單獨定義一行中各列的表現,將其改為只讀,如:
    <ASP:DataGrid id="MyDataGrid" runat="server"
    ......
    DataKeyFIEld="au_id"
    AutoGenerateColumns="false"
    >
    <property name="Columns">
        <ASP:EditCommandColumn EditText="編輯" CancleText="取消" UpdateText="更新"/>
        <ASP:BoundColumn HeaderText="au_id" SortField="au_id" ReadOnly="True" DataFIEld="au_id"/>
        <ASP:BoundColumn HeaderText="電話" SortField="phone" DataFIEld="phone"/>
        ......
    </property>
    </ASP:DataGrid>
    
    。刪除記錄
    加一個ButtonColumn控件,Command設為"Delete",將引發DeleteCommand事件。
    
    。排序
    當用戶點一列的Header時,如果DataGrid的AllowSorting屬性為True,則一個OnSortCommand
事件產生,參數DataGridSortCommandEventArgs的SortFIEld傳回來的是哪一個列被選中,如:
    protected void MyDataGrid_Sort(Object src,DataGridSortCommandEventArgs E){
        DataView source=ds.Tables["Authors"].DefautlVIEw;
        Source.Sort=E.SortFIEld;
        MyDataGrid.DataBind();
    }
    
    。表間關系
    用一列做個連接,跳轉到另一頁去查看對應的詳細資料,用控件HyperLinkColumn,如:
    <property name="Columns">
        <ASP:HyperLinkColunn 
        DataNavigateUrlFIEld="au_id"
        DataNavigateUrlFormatString="a.ASPx?id={0}"
        Text="詳細情況"
        />
    </property>
    
    。訪問基於XML的數據
    DataSet有一個方法叫ReadXml,用FileStream作為參數,XML文件的格式為:
    <DocumentElement>
        <TableName>
            <ColumnName1>Comumn Value</ColunName1>
            ......
        </TableName>
    </DocumentElement>
    
    每一個<TableName>段代表一行數據。
    例:
    DataSet ds = new DataSet();
    FileStream fs = new FileStream(Server.Mappath("a.XML"),FileMode.Open,FileAccess.Read);
    StreamReader reader = new StreamReader(fs);
    ds.ReadXML(reader);
    DataView source = new DataVIEw(ds.Tables[0]);
    MySpan.InnerHtml = source.Table.TableName;
    MyDataGrid.DataSource = source;
    MyDataGrid.DataBind();
    還可以分別調用ReadXmlSchema和ReadXMLData分開讀取模式和數據。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved