透過OpenAccessLinqDataSource執行新增作業

  • 1684
  • 0

透過OpenAccessLinqDataSource執行新增作業

前一篇簡單透過 OpenAccessLinqDataSource 執行簡易查詢,並且做了免寫程式直接刪除資料的範例,本篇文章要說明如何透過 OpenAccessLinqDataSource 執行新增,而且在對應的事件做一些處理。

----------

前一篇簡單透過 OpenAccessLinqDataSource 執行簡易查詢,並且做了免寫程式直接刪除資料的範例,現在我們來試試透過 OpenAccessLinqDataSource 新增一筆類別資料,而且做點小變化。

請在 Web 專案中,新增一個 InsertOperation.aspx 頁面,放一個類別名稱的輸入欄位、新增按鈕和顯示結果用的 Label,當然還要放一個 OpenAccessLinqDataSource 控制項:

160718


<%@ Register Assembly="Telerik.OpenAccess.Web.40" Namespace="Telerik.OpenAccess.Web" TagPrefix="telerik" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            類別名稱:<asp:TextBox ID="txtCategoryName" runat="server"></asp:TextBox>
            <asp:Button ID="btnCreate" runat="server" Text="新增類別" />
            <br />
            <asp:Label ID="lblResult" runat="server" ForeColor="Red"></asp:Label>
        </div>
        <telerik:OpenAccessLinqDataSource ID="OpenAccessLinqDataSource1" runat="server" ContextTypeName="OALinqDataSourceWeb01.NWModel" EnableInsert="True" EntityTypeName="" ResourceSetName="Categories">
            <InsertParameters>
                <asp:Parameter Name="DESCRIPTION" DefaultValue="這是類別描述預設值" />
            </InsertParameters>
        </telerik:OpenAccessLinqDataSource>
    </form>
</body>
</html>

上面有個地方我們會覺得疑惑,就是 InsertParameters 區段。這個區段是讓我們設定某些實體屬性預設值的方式,例如類別有類別描述,因為我們只有在頁面上放類別名稱,所以就在這裡放了類別描述屬性的預設值。

接著要設定 OpenAccessLinqDataSource 的資料來源,和前一篇一樣,我們選擇 NWModel,並指定使用 Categories 實體集,然後在按【Next】,這裡我們切換到【Advance】頁籤,勾選「Enable Automatic Inserts」,或者也可以直接按【Finish】鈕,然後再透過 OpenAccessLinqDataSource 智慧標籤勾選「Enable Insert」即可:

152820

161031

接著我們撰寫新增按鈕的事件處理程式:


    Dim listDictionary As New ListDictionary()
    listDictionary.Add("CATEGORYNAME", txtCategoryName.Text.Trim())
    lblResult.Text = ""
    Try
        OpenAccessLinqDataSource1.Insert(listDictionary)
        lblResult.Text &= "新增成功。"
    Catch ex As Exception
        lblResult.Text &= ex.Message
    End Try
End Sub


CC10-14-2013-3

Gif: http://i.minus.com/iUI7WQOEAuqrz.Gif

輕鬆的就完成新增資料的動作囉。接著我們要再做點進階的事,在 OpenAccessLinqDataSource 新增時,有兩個事件叫 Inserting 和 Inserted,分別是在 OpenAccessLinqDataSource  執行新增動作前,和執行新增動作完成時,我們可以用程式介入的時間點。上述 Gif 畫面中,我們看到新增成功時,會顯示類別編號,這個在 btnCreate_Click 並沒有做,是在 Inserted 時加入的,另外,我們在 Inserting 時,可以調整要寫入的資料屬性,例如類別有描述,先前我們在 Html 中做了預設值,但是在 Inserting 事件事,我們可以再度調整它。

除此之外,當 OpenAccess ORM 存取底層資料庫發生錯誤時,我們也可以在 Inserted 事件中,透過 e.Exception 屬性取出錯誤訊息,若不打算把此 Exception 擲出,我們還可以設定 e.ExceptionHandled = True,表示錯誤已處理完成,不用往上層丟,請見下述範例程式碼:


    If e.Exception IsNot Nothing Then
        lblResult.Text = e.Exception.Message
        e.ExceptionHandled = True
    End If
    Dim category As Categories = TryCast(e.Result, Categories)
    VerifyCategoryInstance(category)
    lblResult.Text = "類別編號:" + category.CATEGORYID.ToString()
End Sub

Private Sub OpenAccessLinqDataSource1_Inserting(sender As Object, e As Telerik.OpenAccess.Web.OpenAccessLinqDataSourceInsertEventArgs) Handles OpenAccessLinqDataSource1.Inserting
    Dim category As Categories = TryCast(e.NewObject, Categories)
    VerifyCategoryInstance(category)
    If String.IsNullOrWhiteSpace(category.DESCRIPTION) Then
        category.DESCRIPTION = "在 Insedrting 事件時修改了 Description"
    End If
End Sub

Private Shared Sub VerifyCategoryInstance(ByVal category As Categories)
    If category Is Nothing Then
        Throw New System.NullReferenceException("無法取得類別資料。")
    End If
End Sub

--------
沒什麼特別的~
不過是一些筆記而已