• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • DataGrid Web 控件的進階應用--使用Template 的數據更新

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    上述的程序代碼范例中,對于數據編修的功能還不是很完整,無法將記錄的修改狀況更新回數據源。接下來我們利用EditCommandColumn、TemplateColumn 以及一些事件程序將數據更新的功能完成。 %@Import Namespace=System.Data.ADO% %@Import Namespace=System.Da


        上述的程序代碼范例中,對于數據編修的功能還不是很完整,無法將記錄的修改狀況更新回數據源。接下來我們利用EditCommandColumn、TemplateColumn 以及一些事件程序將數據更新的功能完成。

    <%@Import Namespace=System.Data.ADO%>
    <%@Import Namespace=System.Data%>
    <Html>
    <Form Runat="Server">
    <ASP:DataGrid Id="dgA" AllowPaging="True" PageSize="5"
    OnPageIndexChanged="dgA_PageChg" Runat="Server"
    PagerStyle-Mode="NumericPages" BorderColor="#808080"
    HeaderStyle-Font-Names="Courier New"
    HeaderStyle-BackColor="#D1DCEB"
    HeaderStyle-HorizontalAlign="Center"
    AutoGenerateColumns="False"
    OnEditCommand="dgA_ECmd" OnUpdateCommand="dgA_UCmd"
    OnCancelCommand="dgA_CCmd" >
    <Property Name="Columns">
    <ASP:TemplateColumn>
    <Template Name="HeaderTemplate">
    姓名
    </Template>
    <Template Name="ItemTemplate">
    <ASP:Image ImageUrl="ico7.gif" Runat="Server"/>
    <%#Container.DataItem("UserName")%>
    </Template>
    <Template Name="EditItemTemplate">
    <ASP:Image ImageUrl="ico8.gif" Runat="Server"/>
    <ASP:TextBox Id="txtUserName"
    Text='<%#Container.DataItem("UserName")%>'
    Runat="Server"/>
    </Template>
    </ASP:TemplateColumn>
    <ASP:TemplateColumn>
    <Template Name="HeaderTemplate">
    電話
    </Template>
    <Template Name="ItemTemplate">
    <ASP:Image ImageUrl="ico7.gif" Runat="Server"/>
    <%#Container.DataItem("UserTel")%>
    </Template>
    <Template Name="EditItemTemplate">
    <ASP:Image ImageUrl="ico8.gif" Runat="Server"/>
    <ASP:TextBox Id="txtUserTel"
    Text='<%#Container.DataItem("UserTel")%>'
    Runat="Server"/>
    </Template>
    </ASP:TemplateColumn>
    <ASP:TemplateColumn>
    <Template Name="HeaderTemplate">
    住址
    </Template>
    <Template Name="ItemTemplate">
    <ASP:Image ImageUrl="ico7.gif" Runat="Server"/>
    <%#Container.DataItem("UserAdd")%>
    </Template>
    <Template Name="EditItemTemplate">
    <ASP:Image ImageUrl="ico8.gif" Runat="Server"/>
    <ASP:TextBox Id="txtUserAdd"
    Text='<%#Container.DataItem("UserAdd")%>'
    Runat="Server"/>
    </Template>
    </ASP:TemplateColumn>
    <ASP:EditCommandColumn
    HeaderText="編輯"
    EditText="編輯"
    UpdateText="更新"
    CancelText="放棄"/>
    </Property>
    </ASP:DataGrid>
    </Form>
    <Script Language="VB" Runat="Server">
    Dim dscA As ADODataSetCommand=New ADODataSetCommand("Select * From
    Members", _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data
    Source=C:\InetPub\wwwroot\CR\Ch08\MyWeb.Mdb")
    Dim dsDataSet As DataSet=New DataSet
    Dim dtDataTable As DataTable
    Sub Page_Load(Sender As Object, e As EventArgs)
    If Page.IsPostBack=False Then
    BindGrid()
    End If
    End Sub
    Sub BindGrid() '數據系結程序
    dscA.FillDataSet(dsDataSet,"Members")
    dtDataTable=dsDataSet.Tables("Members")
    dgA.DataSource=dtDataTable.DefaultView
    Page.DataBind()
    End Sub
    Sub dgA_PageChg(Sender As Object, e As DataGridPageChangedEventArgs) '
    換頁程序
    BindGrid()
    End Sub
    Sub dgA_ECmd(Sender As Object, e As DataGridCommandEventArgs) '進入編
    輯模式dgA.EditItemIndex=e.Item.ItemIndex BindGrid()
    End Sub
    Sub dgA_UCmd(Sender As Object, e As DataGridCommandEventArgs) '數據更
    新程序
    Dim shtR As Short=(dgA.CurrentPageIndex * dgA.PageSize) +
    e.Item.ItemIndex
    Dim txtTemp As TextBox
    dscA.FillDataSet(dsDataSet,"Members") '先將DataTable 從資料
    源取回
    dtDataTable=dsDataSet.Tables("Members") '為了便利起見而將
    dtDataTable 指向目標數據表
    txtTemp=e.Item.FindControl("txtUserName") '搜尋
    DataListItem 內的控件
    dtDataTable.Rows(shtR)("UserName")=txtTemp.Text '將找到
    的控制之Text 屬性更新回
    '相對應的記錄中
    txtTemp=e.Item.FindControl("txtUserTel")
    dtDataTable.Rows(shtR)("UserTel")=txtTemp.Text
    txtTemp=e.Item.FindControl("txtUserAdd")
    dtDataTable.Rows(shtR)("UserAdd")=txtTemp.Text
    dscA.Update(dsDataSet,"Members") '將所作的改變更新回數據源
    dgA.EditItemIndex=-1
    BindGrid()
    End Sub
    Sub dgA_CCmd(Sender As Object, e As DataGridCommandEventArgs)
    dgA.EditItemIndex=-1
    BindGrid()
    End Sub
    </SCRIPT>
    </Html>


        上述范例碼指定了DataGrid Web 控件的OnEditCommand、OnUpdateCommand、以及OnCancelCommand 事件。所以使用者按下編輯選項并觸發OnEditCommand 事件時,會執行dgA_Ecmd 事件程序讓該筆記錄進入編輯模式;如下程序代碼片段所示:

    Sub dgA_ECmd(Sender As Object, e As DataGridCommandEventArgs)
    dgA.EditItemIndex=e.Item.ItemIndex
    BindGrid()
    End Sub

        由于我們在EditItemTemplate 中指定進入編輯模式時,以TextBox 來讓使用者編修數據,所以當使用者點選「編輯」選項時會依照我們所設定的樣版來顯示編輯模式;如下程序代碼片段所示:

    <Template Name= "EditItemTemplate">
    <ASP:Image ImageUrl="ico8.gif" Runat="Server"/>
    <ASP:TextBox Id="txtUserAdd"
    Text='<%#Container.DataItem("UserAdd")%>'
    Runat="Server"/>
    </Template>


    當使用者編輯完畢按下確定后,即執行dgA_Ucmd 這個事件程序,其程序代碼片段如下所示:

    Sub dgA_UCmd(Sender As Object, e As DataGridCommandEventArgs) '數據更
    新程序
    Dim shtR As Short=(dgA.CurrentPageIndex * dgA.PageSize) +
    e.Item.ItemIndex
    Dim txtTemp As TextBox
    dscA.FillDataSet(dsDataSet,"Members") '先將DataTable 從資料源
    取回
    dtDataTable=dsDataSet.Tables("Members") '為了便利起見而將
    dtDataTable 指向目標數據表
    txtTemp=e.Item.FindControl("txtUserName") '搜尋DataListItem 內的
    控件
    dtDataTable.Rows(shtR)("UserName")=txtTemp.Text '將找到的控制之
    Text 屬性更新回
    '相對應的記錄中
    '...程序代碼略
    dscA.Update(dsDataSet,"Members") '將所作的改變更新回數據源
    dgA.EditItemIndex=-1 BindGrid()
    End Sub

     ???上述程序代碼片段中我們先將數據源中的Members 數據表取回,然后為了便利使用方便我們宣告了一個指向DataTable 對象的變量dtDataTable。這里有一點要特別注意, 在還沒將DataGridWeb 控件中使用者所修改的資料更新回DataTable 前,不可以呼叫DataBind 方法;否則使用者所修改的數據會被原始的數據所覆蓋,而造成更新回數據源的數據還是原始數據的錯誤,一定要小心。接下來我們利用DataListItem 的FinControl 方法將TextBox 控件的參考取回,如下程序代碼片段所示:

    txtTemp=e.Item.FindControl("txtUserName") '搜尋DataListItem 內的控件
    dtDataTable.Rows(shtR)("UserName")=txtTemp.Text '將找到的控制之
    Text 屬性更新回
    '相對應的記錄中

        因為我們使用樣版來呈現我們想要的格式,在DataListItem 中的每一個字段可能由許多復雜的控件組成;所以TextBox 不見得會是TableCell 對象中的第一個對象,故利用指定Cell 中Controls集合的Index 值來傳回控件的參考,可能需要參考很多階層。所以我們直接以ID 屬性來搜尋控件,并傳環控件的參考比較方便。最后將找到的TextBox 控件之Text 屬性逐一更新回對應的字段后,再呼叫DataSetCommand 的Update 方法即大功告成。

    限制使用者對數據的更新
        倘若我們不允許使用者修改某個字段的數據,在沒有設定Tamplate 的狀況下只要指定字段的ReadOnly 屬性為True 即可;而若是有指定Template 的狀況,只要不要設定該字段EditItemTemplate 即可。下圖為沒有指定EditItemTemplate 的情形:

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>