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

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

  • <strong id="5koa6"></strong>
  • ASP.NET Datagrid創建自定義列(2)

    發表于:2007-06-30來源:作者:點擊數: 標簽:
    內置的 DataGrid 列 了解問題的大概情況后,現在我們后退一步,看一下 ASP.net 中構建的 5 種 Datagrid 列類型及其父類型 DataGridColumn。 BoundColumn。這是文本字段的標準顯示。它顯示為純文本,但是當 Datagrid 處于“編輯”模式時,它將轉換為 TextBox
         內置的 DataGrid 列
      
        了解問題的大概情況后,現在我們后退一步,看一下 ASP.net 中構建的 5 種 Datagrid 列類型及其父類型 DataGridColumn。
      
        BoundColumn。這是文本字段的標準顯示。它顯示為純文本,但是當 Datagrid 處于“編輯”模式時,它將轉換為 TextBox。還可以選擇格式化選項。
      
        HyPerlinkColumn。用于顯示文本數據,還代表一個 Web 地址 (URL)。URL 可以與顯示文本相同,也可以不同,它們都可以單獨設置。它顯示為 <a href=...> 標記。
      
        ButtonColumn。它使用戶能夠按行與網格進行交互。它可以顯示為超鏈接 LinkButton (<a href=...>) 或 Pushbutton (<input type="button">)。單擊該按鈕時將觸發 PostBack,而在 Datagrid 上觸發 ItemCommand 事件。
      
        EditCommandColumn。它與 ButtonColumn 類似,但是它自動創建用于編輯 Datagrid、取消或提交更改的按鈕。觸發 ItemCommand 事件,以及所單擊按鈕的特定事件:EditCommand、CancelCommand 或 UpdateCommand。
      
        TemplateColumn。用于完全控制顯示給用戶的控件,分為多種模板,例如 ItemTemplate 和 EditItemTemplate。任何 ASP.NET 或 HTML 控件或控件組都可以放置在這些模板中。
      
        注意:直接使用這些列類型之前,請關閉 AutoGenerateColumns(運行時自動生成列)。然后,您可以在屬性生成器中使用這些列類型,或者直接在 ASPX 文件的 HTML 代碼中使用。
      
      
      
      圖 2:從 DataGridColumn 中繼承的 5 種內置列
      
        盡管這些列類型非常有用,它們不過是了解 Datagrid 列內容的開始。
      
        傳統方法:TemplateColumn 中的 DropDownList
      
        在研究如何創建新列類型之前,首先讓我們看一下如何通過直接在 TemplateColumn 內使用 DropDownList 解決下拉列表的問題,而不用自定義列。ItemTemplate 將只包含表示當前值的純文本表示,而 EditItemTemplate 包含一個需要在運行時管理的 <asp:DropDownList> 控件。
      
      <asp:DataGrid id="DataGrid1" runat="server" CssClass="grid" AutoGenerateColumns="False">
      <Columns>
      ?。糰sp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" />
      ?。糰sp:BoundColumn DataField="OrderID" ReadOnly="True" HeaderText="Order ID" />
      ?。糰sp:BoundColumn DataField="ShipName" HeaderText="Ship to" ReadOnly="True" />
      ?。糰sp:BoundColumn DataField="ShipCountry" HeaderText="Country" ReadOnly="True" />
      ?。糰sp:TemplateColumn HeaderText="Ship Method">
      ?。糏temTemplate>
       ?。?#Container.DataItem("ShipVia")%>
      ?。?ItemTemplate>
      ?。糆ditItemTemplate>
       ?。糰sp:DropDownList runat="server" ID="Dropdownlist1"/>
      ?。?EditItemTemplate>
      ?。?asp:TemplateColumn>
      </Columns>
      </asp:DataGrid>
      
        綁定 Datagrid 的代碼:
      
      Sub BindGrid()
       Dim SQL As String = "SELECT OrderID,
       ShipName, ShipCountry, ShipVia FROM Orders"
       Dim DA As SqlDataAdapter = New SqlDataAdapter(SQL, ConnStr)
       Dim DS As New DataSet
       DA.Fill(DS, "Orders")
       DataGrid1.DataSource = DS.Tables("Orders").DefaultView
       DataGrid1.DataBind()
      End Sub
      
        當前編輯的項目是在觸發 Datagrid 的 ItemDataBound 事件時綁定到 DropDownList 的。使用 ItemDataBound 事件時,請檢查當前項目的 ListItemType,否則您可能會發現您正在使用 HeaderItem 或其他不適用的項目類型。為 EditItem 引用 DropDownList 控件。在下面的代碼中,我直接使用單元格控件集進行說明(為了與后面的示例保持一致),但是,您可以采用簡單的方法,直接為 DropDownList 控件指定 ID,并使用 Datagrid 項目的 FindControl 方法定位控件引用。由于 Datagrid 被綁定到 DataTable 的默認視圖,而該視圖的元素屬于 DataRowView 類型,所以您可以將當前項目的 DataItem 屬性轉換為一個 DataRowView 實例。這樣,您可以按字段名直接引用 DataItem 中的字段。使用這種方法,將“ShipVia”的當前值保存到該記錄中,并使用它選擇相應的下拉列表項。
      
      Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, _
      ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) _
      Handles DataGrid1.ItemDataBound
       If e.Item.ItemType = ListItemType.EditItem Then
        Dim DRV As DataRowView = CType(e.Item.DataItem, DataRowView)
        Dim CurrentShip As String = DRV("ShipVia")
        Dim DDL As DropDownList = CType(e.Item.Cells(4).Controls(1), DropDownList)
        Dim SQL As String = "SELECT ShipperID, CompanyName FROM Shippers ORDER BY ShipperID"
        Dim DA As SqlDataAdapter = New SqlDataAdapter(SQL, ConnStr)
        Dim DS As New DataSet
        Dim item As ListItem
        DA.Fill(DS, "Shippers")
        DDL.DataSource = DS.Tables("Shippers").DefaultView
        DDL.DataTextField = "CompanyName"
        DDL.DataValueField = "ShipperID"
        DDL.DataBind()
        item = DDL.Items.FindByValue(CurrentShip)
       If Not item Is Nothing Then item.Selected = True
       End If
      End Sub
      
        最后,編寫從 DropDownList 中檢索當前選定值的代碼,并執行數據庫更新:
      
      Private Sub DataGrid1_UpdateCommand(ByVal source As Object, _
      ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
      Handles DataGrid1.UpdateCommand
       Dim DDL As DropDownList = CType(e.Item.Cells(4).Controls(1), DropDownList)
       Dim NewShip As Integer = DDL.SelectedValue
       Dim OrderID As Integer = Int32.Parse(e.Item.Cells(1).Text)
       Dim SQL As String = "UPDATE Orders SET ShipVia=@Ship WHERE OrderID=@ID"
       Dim Conn As SqlConnection = New SqlConnection(ConnStr)
       Dim Cmd As New SqlCommand(SQL, Conn)
       Cmd.Parameters.Add(New SqlParameter("@Ship", NewShip))
       Cmd.Parameters.Add(New SqlParameter("@ID", OrderID))
       Conn.Open()
       Cmd.ExecuteNonQuery()
       Conn.Close()
       DataGrid1.EditItemIndex = -1
       BindGrid()
      End Sub
      
      

    原文轉自: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>