中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      ASP.NET 2.0 中跨網頁提交的方法有哪三種

      時間:2024-08-14 14:44:47 ASP 我要投稿
      • 相關推薦

      ASP.NET 2.0 中跨網頁提交的方法有哪三種

        當在一個ASP.NET

        Web頁面中進行操作時,在默認情況下向當前頁進行提交。這種行為在ASP.NET出現之前并沒有什么關系,但在ASP.NET中當我們想向另外一個Web頁提交一個Web

        Form時該如何做呢?在ASP.NET1.0中這個問題變得很難解決,但在ASP.NET2.0中為開發人員提供了更容易的解決的技術:跨網頁提交。這種技術允許一個網頁在提交數據時提交給另外的一個頁面。在跨網頁提交中,用于初始化提交代碼的頁面叫源頁面,而客戶提交的頁面叫目標頁面。

        為了方便起見,目標頁面仍然獲得原頁面提交的所有數據。換名話說,從技術觀點出發,我們可以用同樣的方式處理其他ASP.NET頁面提交的數據。

        這個新特性意味著ASP.NET2.0開發人員目前有三種可供選擇的技術來將數據從一個web頁面傳送到另外一個頁面。這三種方法是:響應重定向,服務端傳輸和新的跨網頁提交特性。我們可以已經熟悉前兩種技術了,因此,我們只是簡要地復習一下它們,然后我們會將主要精力放到學習如何使用跨網頁提交特性,以及闡述一下這種方法和響應重定向以及服務傳輸方式有什么不同。

        一、響應重定向方法

        響應重定向方法是目前為止將一個網頁重定向到另一個網頁的最簡單的方法的最簡單的方法。當Web服務器接到一個重定向請求后,它會將一個響應頭送給客戶端,這將導致客戶端發送一個新的請求到服務器。按句話說,一個重定向請求實際上是兩個請求響應:一個是最初的請求響應,另一個是新的重定向請求響應。

        在ASP.NET中實現重定向很容易。下面的代碼演示了如何使用Response.Redirect方法實現網頁重定向:

        protected

        void

        Redirect_Click(object

        sender,

        EventArgs

        e)

        {

        Response.Redirect("menu.aspx");

        }

        要注意的是重定向請求只是一個GET請求,這就意味著我們不能從源頁中通過重定向命令提交數據。但是我們可以在重定向中使用查詢字符串來傳遞數據。如下面代碼所示:

        protected

        void

        Redirect_Click(object

        sender,

        EventArgs

        e)

        {

        Response.Redirect("menu.aspx?userName="

        UserName.Text));

        }

        上面的例子將一個查詢字符串作為參數傳遞給了Response.Redirect方法的目標URL。我們可以通過如下的代碼獲得源數據。

        protected

        void

        Page_Load(object

        sender,

        EventArgs

        e)

        {

        string

        userName

        Request["userName"];

        }

        二、服務器傳輸方法

        和依賴于客戶端向另一個新頁發請求不同,服務器傳輸是一種服務器重定向技術,這種技術通過簡單的改變Web服務器所處理的代碼來達到請求一個新頁的目的。當被請求頁和源頁面在同一個服務器時,服務器傳輸要比Response.Redirect方法更有效,這是由于這種技術可以避免額外的開銷,僅僅使用服務器的資源就可以進行重定向。要注意的這種技術有一個副作用,在頁面進行重定向時,客戶端的URL仍然會保持源頁面的URL,這可能會使客戶認為他們所獲得的數據是源頁面產生的。當然,在大多數情況下,這不是問題,但是這將使調試變得更困難。

        Server.Transfer方法還可以保存初始頁的HttpContext。因此,目標頁可以訪問源頁面的值。我們可以使用FormsCollection屬性來從目標頁面中獲得源頁面的值。首先,要確定我們使用了被重載的方法,這個方法有兩個參數:目標URL和一個Boolean類型的值,告訴服務器是否保存用于描述源頁面值的Form。如下面的代碼所示:

        [NextPage]

        Server.Transfer("Menu.aspx",true);

        然后,我們在目標頁面中獲得一個叫txtUserName的Textbox控件的值的代碼如下:

        object

        obj

        Request.Form["txtUserName"];

        三、Response.Redirect和Server.Transfer的比較

        由于Response.Redirect方法要進行兩次請求響應操作,因此,我們應該在對性能要求高的網站盡量避免使用這種方法。然而,只從技術上說,使用redirect方式確實可以從一個網頁跳到另一個網頁。相比之下,Server.Transfer會更有效率,但是跳轉的范圍僅限于同一個Web服務器的不同網頁。從本質上說,我們可以使用Server.Transfer來消除不必要的請求響應操作。如果我們需要重定位到不同服務器的網頁,就需要使用Response.Redirect方法。

        四、跨頁提交概述

        在ASP.NET

        2.0中,我們可以通過實現IbuttonControl接口提交給不同的WebForm,來實現跨網頁的提交。和Response.Redirect類似,跨網頁提交是一個基于客戶端的傳輸機制,但也有點象Server.Transfer,目標網頁也可以訪問源網頁的數據。為了使用跨網頁提交,我們需要在源網頁中的PostBackUrl屬性中指定目標URL。

        五、實現跨網頁提交

        這部分將討論一下如何在ASP.NET2.0中實現跨網頁提交。為了開始我們的學習,假設有兩個Web頁,一個是源Web頁,另一個是目標Web頁。在源網頁中初始化了使用按鈕進行的跨網頁提交操作。我們首先必須設置目標網頁按鈕的PostBackUrl屬性,順便說一句,所有實現了System.Web.UI.WebControls.IbuttonControl接口的Web控件都有跨網頁提交的特性。下面的代碼將演示這一過程。

        PostBackUrl="~/target.aspx"

        text

        "Post

        to

        a

        target

        page"/>

        當我們設置PostBackUrl屬性時,ASP.NET框架將相應的控件綁定到一個新的叫WebForm_DoPostBackWithOptions的JavaScript函數,產生的Html代碼如下:

        onclick="javascript:WebForm_DoPostBackWithOptions(

        new

        WebForm_PostBackOptions("btnSubmit",

        false,

        "Target.aspx",

        false,

        false))"

        id="btnSubmit"

        />

        對于上面的html代碼來說,當用戶單擊按鈕時,瀏覽器將提交目標URL(Target.aspx),而不是源URL。

        六、從目標頁面中獲得源頁面控件的值

        ASP.NET2.0提供了一個叫PreviousPage的新的屬性,這個屬性無論在何時當前頁面進行跨網頁提交操作時都會指向源頁面。要注意的是,當源頁面和目標頁面在不同的應用程序中時,這個屬性包含null(這個null并不是未初始化的意思)。還有要注意的是當目標網頁訪問PreviousPage屬性時可以獲得源頁面的數據,ASP.NET運行時裝載并執行了源頁面。這將引發ProcessChildRequest事件的發生。而且,它還會引發Page_Init事件、Page_Load和任何其他的源頁面按鈕單擊事件。

        因此,我們要避免由于不小心進行誤操作,所以最好通過IsCrossPostBack屬性來確認是否為一個跨網頁提交發生,如果這個屬性值為true,那么目標網頁就是通過一個跨網頁提交動作而調用的。如果是通過另外一種方式調用的(如一般的請求、Response.Redirect或是一個Server.Transfer),這個屬性的值為false。下面的例子演示了如何使用這個屬性。

        if

        PreviousPage.IsCrossPagePostBack)

        {

        //執行代碼

        }[NextPage]

        這個PreviousPage屬性在Server.Transfer和跨網頁提交中都可以使用。在ASP.NET2.0中,我們可以在調用Server.Transfer操作后使用PreviousPage屬性在目標頁面中來獲得源頁面的數據,代碼如下:

        {

        Server.Transfer("menu.aspx");

        }

        protected

        void

        Redirect_Click(object

        sender,

        EventArgs

        e)

        在這個接收面中我們現在可以獲得Web頁面的數據,代碼如下:

        protected

        void

        Page_Load(object

        sender,

        EventArgs

        e)

        {

        if

        (PreviousPage

        null)

        {

        TextBox

        txtBox

        (TextBox)

        PreviousPage.FindControl("txtUserName");

        if

        (textBox

        null)

        string

        userName

        textBox.Text;

        //其他可執行的代碼

        }

        }

        要注意的是上面的代碼必須將txtUserName控件轉換為TextBox類型,以便可以訪問其中的值。

        七、使用PreviousPageType

        PreviousPageType屬性提供了在跨網頁操作中訪問源頁面的強類型能力,下面讓我們演示一下如何不通過任何類型轉換來從源頁面中獲得控件值。代碼如下:

        <

        asp:Textbox

        ID="txtUserName"

        Runat="server"

        />

        <

        asp:Textbox

        ID="txtPassword"

        Runat="server"

        />

        <

        asp:Button

        ID="Submit"

        Runat="server"

        Text="Login"

        PostBackUrl="Menu.aspx"

        />

        要注意的是單擊按鈕可以重定向到一個叫“Menu.asp”的目標頁。這個目標頁可以使用如下的代碼獲得用戶名和密碼:

        八、保存視圖狀態

        對于跨網頁提交來說,ASP.NET2.0

        內嵌了一個叫__POSTBACK的隱藏字段,這個字段包含了關于源頁面的視圖信息

        也就是由源頁面提供了,包含了一個帶有一個非空PostBackUrl屬性值的服務端控件。目標頁可以使用__POSTBACK中的信息來獲得源頁面的視圖狀態信息。代碼如下:

        if(PreviousPage!=null

        &&

        PreviousPage.IsCrossPagePostBack

        &&

        PreviousPage.IsValid)

        {

        TextBox

        txtBox

        PreviousPage.FindControl("txtUserName");

        Response.Write(txtBox.Text);

        }

        在上面的代碼中核對了用于確保PreviousPage屬性不為null的檢查代碼。順便提一下,如果目標頁和源頁面不在同一個應用程序中,這個PreviousPage屬性的值為null。只有在進行跨網頁提交操作時,IsCrossPagePostBack屬性才為true。

        這個跨網頁提交的特性,是ASP.NET2.0中最強有力的特性之一,這種技術將允許在一個頁面中提交到另外一個頁面,并且可以在目標頁面地無縫地操作源頁面中的數據。

        asp.net 2.0 權限樹的控制

        做權限的時候,主要實現如下功能

        1、該節點可以訪問,則他的父節點也必能訪問;

        2、該節點可以訪問,則他的子節點也都能訪問;

        3、該節點不可訪問,則他的子節點也不能訪問。

        使用帶CheckBox的數型結構能得到很好的用戶體驗,可是編程的難度也是有點增加,如果全部有服務端來完成,那點下刷下,肯定不行,只能使用javascript,javascript調試的時候郁悶的很,一個字類,還有郁悶的遞歸,麻煩

        我以前是使用以下該方法

        <script

        language="javascript">

        //oncheck事件

        function

        tree_oncheck(tree)

        {

        var

        i;

        var

        node=tree.getTreeNode(tree.clickedNodeIndex);

        var

        Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");

        setcheck(node,Pchecked);

        setParent(node,Pchecked);

        //window.alert(Pchecked);

        document.all.checked.value

        if

        (tree.getChildren().length

        >

        0)

        {

        for

        (i=0;i<=tree.getChildren().length-1;i++)

        {

        if

        (tree.getChildren()[i].getAttribute("Checked"))

        {

        AddChecked(tree.getChildren()[i]);

        }

        FindCheckedFromNode(tree.getChildren()[i]);

        }

        }

        }

        //設置子節點選中

        function

        setcheck(node,Pchecked)

        {

        var

        i;

        var

        ChildNode=new

        Array();

        ChildNode=node.getChildren();

        if(parseInt(ChildNode.length)==0)

        {

        return;

        }

        else

        {

        for(i=0;i<ChildNode.length;i++)

        {

        var

        cNode;

        cNode=ChildNode[i];

        cNode.setAttribute("Checked",Pchecked);

        //cNode.Checked

        Pchecked;

        if(parseInt(cNode.getChildren().length)!=0)

        {

        setcheck(cNode,Pchecked);

        }

        }

        }

        }

        //設置子節點選中/取消;

        //同時需要設置父節點的狀態(如果是取消選中的話,僅僅設置本節點及其所有字接點,不涉及父接點)

        function

        setParent(node,Pc)

        {

        var

        parentNode

        node.getParent();

        if(parentNode)

        {

        var

        parentNodeFather

        parentNode.getParent();

        if(parentNodeFather)

        {

        setParent(parentNode,Pc);

        }

        if(Pc)

        {parentNode.setAttribute("checked",Pc);}

        else

        {

        checkBrother(parentNode,Pc,node.getAttribute("NodeData"))

        }

        }

        }

        //檢查子接點是否有選擇的,如果有一個選擇了,那返回true

        //只查第一級節點.

        function

        checkBrother(parentNode,Pc,NodeData)

        {

        var

        childNodes

        new

        Array();

        childNodes

        parentNode.getChildren();

        if(childNodes.length

        >0)

        {

        var

        bChecked

        true;

        for(var

        i=0;i<childNodes.length;i++)

        {

        if(childNodes[i].getAttribute("checked")

        true

        &&

        childNodes[i].getAttribute("NodeData")

        NodeData)

        {

        //alert(i+childNodes[i].getAttribute("Text"));

        bChecked

        false;

        break;

        }

        }

        if(bChecked)

        {

        parentNode.setAttribute("checked",Pc);

        }

        else

        {

        //所有父結點選擇

        setParent(parentNode,!Pc)

        }

        }

        else

        {

        parentNode.setAttribute("checked",Pc);

        }

        }

        //獲取所有節點狀態

        function

        FindCheckedFromNode(node)

        {

        var

        i

        0;

        var

        nodes

        new

        Array();

        nodes

        node.getChildren();

        for

        (i

        0;

        i

        <=

        nodes.length

        1;

        i++)

        {

        if

        (nodes[i].getAttribute("Checked"))

        {

        AddChecked(nodes[i]);

        }

        if

        (parseInt(nodes[i].getChildren().length)

        {

        FindCheckedFromNode(nodes[i]);

        }

        }

        }

        //添加選中節點

        function

        AddChecked(node)

        {

        document.all.checked.value

        node.getAttribute("NodeData")

        }

        //-->

        這種方法有個很大的問題,就是他客戶端設置的CheckBox在服務器端是不能獲取的,現在只能在Check的時候遍歷樹,并把Checked的值放在一個文本里,然后提交到服務器,然后服務器來解析1@2@這種字符

        現在我使用的是asp.net2.0,使用的是以下的方法

        function

        public_GetParentByTagName(element,

        tagName)

        {

        var

        parent

        element.parentNode;

        var

        upperTagName

        tagName.toUpperCase();

        //如果這個元素還不是想要的tag就繼續上溯

        while

        (parent

        &&

        (parent.tagName.toUpperCase()

        upperTagName))

        {

        parent

        parent.parentNode

        parent.parentNode

        parent.parentElement;

        }

        return

        parent;

        }

        //設置節點的父節點Cheched——該節點可訪問,則他的父節點也必能訪問

        function

        setParentChecked(objNode)

        {

        var

        objParentDiv

        public_GetParentByTagName(objNode,"div");

        if(objParentDiv==null

        objParentDiv

        "undefined")

        {

        return;

        }

        var

        objID

        objParentDiv.getAttribute("ID");

        objID

        objID.substring(0,objID.indexOf("Nodes"));

        objID

        objID+"CheckBox";

        var

        objParentCheckBox

        document.getElementById(objID);

        if(objParentCheckBox==null

        objParentCheckBox

        "undefined")

        {

        return;

        }

        if(objParentCheckBox.tagName!="INPUT"

        &&

        objParentCheckBox.type

        "checkbox")

        return;

        objParentCheckBox.checked

        true;

        setParentChecked(objParentCheckBox);

        }

        //設置節點的子節點uncheched——該節點不可訪問,則他的子節點也不能訪問

        function

        setChildUnChecked(divID)

        {

        var

        objchild

        divID.children;

        var

        count

        objchild.length;

        for(var

        i=0;i<objchild.length;i++)

        {

        var

        tempObj

        objchild[i];

        if(tempObj.tagName=="INPUT"

        &&

        tempObj.type

        "checkbox")

        {

        tempObj.checked

        false;

        }

        setChildUnChecked(tempObj);

        }

        }

        //設置節點的子節點cheched——該節點可以訪問,則他的子節點也都能訪問

        function

        setChildChecked(divID)

        {

        var

        objchild

        divID.children;

        var

        count

        objchild.length;

        for(var

        i=0;i<objchild.length;i++)

        {

        var

        tempObj

        objchild[i];

        if(tempObj.tagName=="INPUT"

        &&

        tempObj.type

        "checkbox")

        {

        tempObj.checked

        true;

        }

        setChildChecked(tempObj);

        }

        }

        //觸發事件

        function

        CheckEvent()

        {

        var

        objNode

        event.srcElement;

        if(objNode.tagName!="INPUT"

        objNode.type!="checkbox")

        return;

        if(objNode.checked==true)

        {

        setParentChecked(objNode);

        var

        objID

        objNode.getAttribute("ID");

        var

        objID

        objID.substring(0,objID.indexOf("CheckBox"));

        var

        objParentDiv

        document.getElementById(objID+"Nodes");

        if(objParentDiv==null

        objParentDiv

        "undefined")

        {

        return;

        }

        setChildChecked(objParentDiv);

        }

        else

        {

        var

        objID

        objNode.getAttribute("ID");

        var

        objID

        objID.substring(0,objID.indexOf("CheckBox"));

        var

        objParentDiv

        document.getElementById(objID+"Nodes");

        if(objParentDiv==null

        objParentDiv

        "undefined")

        {

        return;

        }

        setChildUnChecked(objParentDiv);

        }

        }這種方法最大的好處就是服務端能得javascript設置的Checked的值,不用沒點下就全部把樹遍利下,直接在服務端遍利一次就行了

        //遍歷子節點

        public

        void

        GetChildNode(TreeNode

        Node)

        {

        foreach

        (TreeNode

        node

        in

        Node.ChildNodes)

        {

        if

        (node.Checked)

        {

        StrChecked

        node.Value+"@";

        }

        GetChildNode(node);

        }

        }

        我照樣能得到它的Check的值

        ASP.NET 2.0中XML數據的處理

        SqlDataSource和ObjectDataSource控件都是平面表格式的數據源控件,操作也相對簡單,在這里我就不細說了.

        在這里我主要談下用于連接XML文件的XmlDataSource和用于連接站點導航數據的SiteMapDataSource這兩個層次數據源控件中XmlDataSource數據綁定到平面表格控件的一起東東.

        XmlDataSource控件允許其它控件綁定到XML數據。XmlDataSource支持DataFile屬性,它被用于指定作為輸入(input)的XML數據文件的路徑。你還可以指定TranformFile屬性,給數據應用XSLT轉換;設置XPath屬性來指定需要暴露的數據源節點的子集。

        <asp:XmlDataSource

        ID="myXmlDataSource"

        runat="server"

        DataFile="~/temp.xml"

        TransformFile="~transXml"

        XPath="//User">

        表格式數據綁定控件綁定到分層數據源也是可行的,但是它只能顯示第一層數據。在下面的demo中,Repeater控件綁定到

        temp.xml文件。由于數據源暴露的頂層節點是<User/>節點,Repeater可以在自己的ItemTemplate模板中使用Eval數據綁定語法綁定到這些節點的屬性。

        <asp:Repeater

        runat="server"

        ID="myReater2"

        DataSourceID="myXmlDataSource">

        標題

        姓名:<%#

        Eval("Name")

        %>

        Email:<%#

        Eval("Email")

        %>

        除了Eval數據綁定語法之外,ASP.NET

        2.0還提供了基于XPath的數據綁定語法,在實現了IXPathNavigable接口的任何數據項上都可以使用它。這里介紹兩種常用的表達式類型:

        XPath(expression,

        [formatString])

        根據數據項計算Xpath表達式的值,返回單個值。

        XPathSelect(expression,

        [formatString])

        根據數據項計算Xpath表達式的值,返回節點列表。

        下面我們來看看使用Xpath數據綁定方法的優勢,通過一個demo來說明.

        Repeater的ItemTemplate模板另外增加了一個Repeater,并把這個內部Repeater的屬性綁定到一個描述當前User節點的Reply子節點的XPathSelect表達式。在內部Repeater的ItemTemplate模板中,Xpath數據綁定表達式根據這些"Reply"內容節點來計算值。ASP.NET

        2.0利用這種技術,使你能夠通過組合表格式數據綁定控件簡便地構造出豐富的、分層的數據顯示方式。

        <asp:Repeater

        runat="server"

        ID="myRpeater"

        DataSourceID="myXmlDataSource">

        標題

        ID:<%#

        XPath("@ID")

        %>

        姓名:

        

        Email:

        

        Content:

        

        <asp:Repeater

        runat="server"

        ID="childRepeater"

        DataSource='<%#

        XPathSelect("Reply")

        %>'>

        留言

        ReplyID:<%#XPath("ID")

        %>

        Time:<%#

        XPath("Time")

        %>

        Content:<%#

        XPath("Content")

        %>

        使用ASP.NET 2.0中的ReportViewer控件

        介紹

        任何數據驅動型的應用程序都有一個普遍的需求,那就是報表。

        但是,在ASP.NET

        1.x中并沒有給我們提供這個非常重要的特性。

        然而很幸運的是,伴隨著。NET

        2.0而來的ReportViewer控件可以滿足你對報表的一些基本需求。

        我將會在本文中向你演示如何使用這個控件。

        ReportViewer控件既可以在web程序中使用,也可以在windows程序中使用。

        在這里,我將只介紹如何在web程序中使用它。

        報表示例

        我們假設要生成一個如下所示的顧客信息列表:

        上面的報表是一個非常簡單的以國家分組的顧客信息列表。

        報表的數據是從Northwind數據庫的Customers表里獲取的。

        默認情況下,它會顯示所有的顧客信息。

        但是,你也可以讓它顯示屬于你指定的某個國家的顧客信息。

        該報表是使用ReportViewer控件設計的,它可以從強類型的DataSet中或者自定義的對象集合中獲取數據。

        在實際的程序開發中,我們往往會使用3層架構,數據的獲取經常會是從業務層取得的DataSet或一個泛型集合。

        在這里,我打算使用一個泛型集合作為數據源,而不是強類型的DataSet.

        創建類庫

        首先,打開Visual

        Studio,然后創建一個名為ReportViewerLib的類庫項目。

        添加一個如下所示的名為Customer的類:

        using

        System;using

        System.Data;using

        System.Configuration;using

        System.Data.SqlClient;using

        System.Collections.Generic;namespace

        ReportViewerLib{

        public

        class

        Customer

        {

        public

        string

        strCustomerID;

        public

        string

        strCompanyName;

        public

        string

        strContactName;

        public

        string

        strCountry;

        public

        string

        CustomerID

        {

        get

        {

        return

        strCustomerID;

        }

        set

        {

        strCustomerID

        value;

        }

        }

        public

        string

        CompanyName

        {

        get

        {

        return

        strCompanyName;

        }

        set

        {

        strCompanyName=

        value;

        }

        }

        public

        string

        ContactName

        {

        get

        {

        return

        strContactName;

        }

        set

        {

        strContactName=

        value;

        }

        }

        public

        string

        Country

        {

        get

        {

        return

        strCountry;

        }

        set

        {

        strCountry=

        value;

        }

        }

        public

        static

        List

        GetCustomersForCountry(string

        country)

        {

        SqlConnection

        cnn=new

        SqlConnection(

        ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);

        SqlCommand

        cmd=new

        SqlCommand();

        cmd.Connection=cnn;

        cmd.CommandText="select

        CustomerID,CompanyName,ContactName,Countryfrom

        customers

        where

        country=@country";

        SqlParameter

        p=new

        SqlParameter("@country",country);

        cmd.Parameters.Add(p);

        cnn.Open();

        SqlDataReader

        reader

        cmd.ExecuteReader();

        List

        list

        new

        List();

        while

        (reader.Read())

        {

        Customer

        c

        new

        Customer();

        c.CustomerID

        reader.GetString(0);

        c.CompanyName

        reader.GetString(1);

        c.ContactName

        reader.GetString(2);

        c.Country

        reader.GetString(3);

        list.Add(c);

        }

        cnn.Close();

        return

        list;

        }

        public

        static

        List

        GetAllCustomers()

        {

        SqlConnection

        cnn

        new

        SqlConnection(

        ConfigurationManager.ConnectionStrings

        ["NorthwindConnectionString"].ConnectionString);

        SqlCommand

        cmd

        new

        SqlCommand();

        cmd.Connection

        cnn;

        cmd.CommandText

        "select

        CustomerID,CompanyName,ContactName,Country

        from

        customers";

        cnn.Open();

        SqlDataReader

        reader

        cmd.ExecuteReader();

        List

        list

        new

        List();

        while

        (reader.Read())

        {

        Customer

        c

        new

        Customer();

        c.CustomerID

        reader.GetString(0);

        c.CompanyName

        reader.GetString(1);

        c.ContactName

        reader.GetString(2);

        c.Country

        reader.GetString(3);

        list.Add(c);

        }

        cnn.Close();

        return

        list;

        }

        }}

        123456下一頁

        GOvar

        pager=new

        iwmsPager(1,6,true);

        [新品]指紋私密 CECT超薄手寫S10低價到貨! 01-08 -

        指紋手機,這一新興的手機功能在CECT

        T100的強勢上市后被廣大機友所熟知并喜愛起來,而借著這順風順水的人氣,CECT又推出了一款指紋安全手機S10,它可以輕松實現六大指紋安全功能:指紋加密、指紋隱形、指紋防盜、指紋鼠標、指紋撥號和指紋動作。而CECT

        S10的整體表現會不會如T100一樣帶給我們無限驚喜呢?請機友們跟隨汀汀的文字一起去解一下吧,說不定你會在瞬間選中它!

        作為熱賣機型CECT

        T100的升級版本,CECT

        S10在外形上略作修改,但更顯精練輕巧,商務氣息依然濃郁。而直板PDA手機風格造型的S10三圍尺寸為113×54×11mm,做工精良,超薄的機身秀氣中不乏端莊。屏幕方面,CECT

        S10擁有一塊26萬色的TFT屏幕,分辨率為目前主流的320*240像素QVGA分辨率,采用觸摸式設計,支持手寫、鍵盤雙輸入方式,并支持大字體撥號。

        娛樂方面,CECT

        S10具有實時流媒體播放,MP3和MP4播放器,錄音機、卡拉OK等功能,而內置的任天堂游戲模擬器,附送游戲高達2000個。在攝像頭方面,S10內置130萬像素CMOS攝像頭,最大支持640*460分辨率的照片拍攝,支持數碼變焦、三種照片質量等拍攝模式,并支持有聲視頻拍攝!此外,CECT

        S10還能方便上網和收發電子郵件,內置資訊時空包括SMS、MMS、IVR、WAP四大類約160個應用。同時,S10還支持大容量T-FLASH擴展存儲卡,并可做U盤使用。

        強大的指紋識別和保密功能是CECT

        S10的突出特色,它通過指紋加密、指紋隱形、指紋防盜、指紋鼠標、指紋撥號和指紋動作這些功能巧妙地把私密信息保護、通信信息隱藏、通信人身份隱藏與快捷操作方式相結合,使用起來不僅令人放心而且舒心,不會擔心因不慎導致的個人信息泄露。另外,S10的電話簿容量為1000個,可以多種方式進行索引,支持群組功能,短信息容量高達400條,足以保留足夠多的個人短息和商務短信。

        縱觀CECT

        S10的整體表現,它的主要賣點是集中在QVGA分辨率的26萬色TFT屏幕、支持手寫鍵盤雙輸入、娛樂游戲擴展功能以及最為可圈可點的指紋識別和保密功能。而以上的這些賣點再配以目前北斗手機網699元的售價就更是劃算至極了,喜歡的機友沒有理由不選它哦!

        [新品]拍照新旗艦 500W索愛K858c盛情上市! 01-08 -

        拍照手機的迅猛發展是時代大環境所需,同時也出乎了很多人的意料!如今200萬像素已經成為了新機上市的家常便飯,320萬像素可以和主流手機貼貼邊,500萬像素才是真正的大勢所趨!在看過了其它廠家的500W像素新機上市后,索尼愛立信Cyber-shot品牌下的拍照悍將K858c也終于閃亮登場了,歡迎已經迫不急待想熟知它一切功能的機友和汀汀一起對K858c來個從頭至尾的了解,它的強大功能定會令你不由自主的傾心于它!

        索愛K858c采用索愛最拿手的直板式造型設計,機身線條筆直硬朗,酷勁十足,尤其是采用黑色為主色調更增強了它的視覺沖擊力。在色彩搭配選擇上,除了經典的黑色外,K858c的功能鍵、鏡頭部分和LOGO標簽都是采用銀色點綴,再配上眩目的綠色方向導航鍵和機身周邊裝飾條,非常惹眼。屏幕方面,K858c采用了一塊2.2英寸的26萬色TFT顯示屏幕,分辨率達到了QVGA級別(240×320像素)。依照索尼愛立信公司的一貫作風,K858c的屏幕顯示非常優秀,畫面細膩度和文字銳度表現得近乎完美。

        索愛K858c的背面設計融入了相機血統,采用雙面卡片DC設計原則,所配備的500萬像素鏡頭支持自動對焦、氙氣閃光燈、16倍數碼變焦等豐富影像功能,完全采用Cyber-shot數碼相機的操作界面,影像菜單比以往更加直觀,DC感更加強烈。另外,Best

        Pic、Photo

        fix等優化軟件的運用也令照片趨于完美。

        索愛K858c內置MP3播放器具備WALKMAN獨有的Mega

        Bass音效,支持藍牙2.0,A2DP標準,配合高質量藍牙立體聲耳機,效果震憾。此外,K858c除了擁有40MB機身內存外,還創造了一個行業第一,它不僅支持M2卡,同時還支持Micro

        SD卡的擴展,而且兩個存儲卡的擴展都使用一個插槽,不同的只是插卡的方向。

        這一場由索愛K858c所引爆的拍照風潮正向我們襲來,它的整體表現足以成為拍照手機領域里的新旗艦,并有能力與其它各大品牌的500萬像素手機相抗衡!北斗手機網4280元的上市售價也算厚道,歡迎有實力嘗鮮的機友們先用為快,來體驗一下K858c所釋放出來無窮魅力!

      【ASP.NET 2.0 中跨網頁提交的方法有哪三種】相關文章:

      javascript跨域訪問的方法07-09

      拉丁舞高低跨部有哪些訓練方法?06-03

      納稅籌劃應具備哪三種意識08-03

      鋼琴的三種彈奏方法06-17

      JavaScript中的三種對象10-24

      網球的三種握拍方法12-14

      java中File類有哪些使用方法06-30

      聲樂藝術中的三種唱法06-29

      三種思科認證學習方法07-17

      家庭常用三種保存茶葉的方法09-25

      主站蜘蛛池模板: 午夜一区二区三区在线视频| 汾阳市| 国产午夜激情视频自拍| 一区二区三区在线视频免费观看| 无码人妻中文中字幕一区二区| 欧美激情国产一区在线不卡| 高邑县| 东莞市| 麻豆久久久国内精品| 日本牲交精品一区二区三区 | 塔城市| 成人性生交大片免费看激情| 国产精品自拍视频免费| 视频一区二区三区中文字幕| 日韩精品欧美激情国产一区| 福利片免费 亚洲| 久久久久亚洲AV无码去区首| 免费黄网站久久成人精品| 久久婷婷是五月综合色| 嵊州市| 福清市| 金坛市| 方城县| 长宁区| 古交市| 韩国三级大全久久网站| 文安县| 午夜不卡亚洲视频| 免费一级欧美大片久久网| 肥西县| 久久久久AV成人无码网站| 武清区| 亚洲午夜无码视频在线播放| 国产在线观看网址不卡一区| 抚顺市| 亚洲无码vr| 国产黑色丝袜在线观看视频| 91久久国产自产拍夜夜嗨| 成人免费丝袜美腿视频| 亚洲av婷婷一区二区三区| 蜜桃av午夜福利一区二区三区 |