Threading Menggunakan Delegates
Threading satu cara menjalankan beberapa bagian program secara pararel. Tujuannya adalah agar aplikasi bisa lebih responsif.
Sebagai contoh:
Public Class AdmPropinsi
....
Public Delegate Function GetDataDelegate() As System.Data.DataSet
Public Function GetData() As System.Data.DataSet
Dim ds As New DataSet
Try
Using conn
If conn.State = ConnectionState.Closed Then conn.Open()
Using cmd
cmd.Connection = conn
cmd.CommandText = "Q_Select_Propinsi"
cmd.CommandType = CommandType.StoredProcedure
da = New OleDbDataAdapter()
da.SelectCommand = cmd
da.TableMappings.Add("TBR_PROV", "pro")
da.Fill(ds, "pro")
End Using
End Using
Catch ex As OleDb.OleDbException
Throw Exception
End Try
Return ds
End Function
End Class
Di Class diatas ada method GetData() yang akan mengambil informasi dari database dan disimpan ke dataset. Selain method juga didefinisikan delegate function yang juga bertipe sama, DataSet (Baris 3).
Untuk memanggil method diatas dan diproses secara paralel di thread yang lain,
Read the rest of this entry
Format Tanggal di Dalam GridView
Jika ingin menampilkan data tanggal (datetime) di dalam gridview dengan format tertentu, kita perlu set property “DataFormatString” di colom BoundField menjadi
DataFormatString=”{0:?}”. Dimana tanda ? adalah karakter kode format.
contoh:
<asp:GridView ID="GridView1" runat="server" Width="100%" >
<Columns>
<asp:BoundField HeaderText="Tanggal" DataField="Tgl" DataFormatString="{0:D}" />
</Columns>
</asp:GridView>
Berikut Daftar karakter yang digunakan untuk format tanggal di gridview.
Read the rest of this entry
Menampilkan UserControl (.ascx) Secara Dinamis
Usercontrol (.ascx) paling umum digunakan untuk menampilkan header dan footer. Bagaimana menampilkan usercontrol yang berbeda-beda di suatu halaman sesuai kondisi tertentu. Misalnya ketika user A login, maka usercontrol A yang di load, user lainnya menggunakan usercontrol B.
1. Tambahkan reference di halaman page (.aspx) di bagian page directive.
<%@ Reference Control="~/WebUserControlA.ascx" %> <%@ Reference Control="~/WebUserControlB.ascx" %>
2. Tambahkan control placeholder di halaman page. Placeholder ini digunakan sebagai lokasi dimana usercontrol yang di load akan diletakkan.
<asp:PlaceHolder ID="placeholder1" runat="server"></asp:PlaceHolder>
3.Di code, tambahkan kode di bagian Page_Init. Misal userlogin adalah userA, maka webusercontrolA yang diload.
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
If Session("USERLOGIN").ToString() = "userA" Then
Dim head As WebUserControlA = DirectCast(Page.LoadControl("~/WebUserControlA.ascx"), WebUserControlA)
placeholder1.Controls.Add(head)
Else
Dim head As WebUserControlB = DirectCast(Page.LoadControl("~/WebUserControlB.ascx"), WebUserControlB)
placeholder1.Controls.Add(head)
End If
End Sub
Usercontrol akan di load di placeholder. Semoga bermanfaat.
Optimalisasi Performance ASP.net
MENYIMPAN INFORMASI VIEWSTATE DI SERVER
Dalam aplikasi web terdapat banyak faktor yang mempengaruhi performance. Salah satu yang menjadi ‘kekurangan’ ASP.net adalah Viewstate. Viewstate ini berisi informasi-informasi dari semua control yang ada di page. Informasi control ini sebenarnya diproses di server dan kemudian di simpan di viewstate dan ditempelkan ke page dan dikirim ke client. Dan tentu saja, semakin besar informasi viewstate ini, semakin besar pula ukuran file yang di transfer ke client. Untuk melihat informasi viewstate, buka halaman .aspx dan lihat kode sumbernya (view source)

Setiap control di halaman selalu memiliki viewstate padahal tidak semua digunakan. Jika ketika proses postback kita tidak memerlukan informasi dari suatu control maka kita tidak perlu menyimpan viewstate. Kita bisa mematikan viewstate suatu control dengan set ‘EnableViewState=false’ di property control. Tentunya kita harus jeli, menentukan control mana yang memerlukan viewstate dan mana yang tidak.
Selain setting diatas, kita juga bisa memindahkan informasi viewstate ini ke server, jadi tidak akan diikutsertakan dalam page yang dikirim ke client. Untuk menyimpan informasi viewstate di server, kita perlu meng override method ‘SavePageStateToPersistenceMedium’ dan method ‘LoadPageStateFromPersistenceMedium’
MapXtreme: Too Many Constants in Subexpressions (Maximum is 255)
Beberapa waktu lalu, Mas Ndereklangkung mengalami error ini ketika membuat aplikasi mapxtreme. Dia mencoba melakukan query untuk mencari objek peta. Parameter yang digunakan diambil dari database, diubah jadi string dan dimasukkan dalam query mapinfo
“Select * from Jabodetabek_Sales_Customers where acc_id in (” & xx & “)”
Namun malah muncul error “Unable to parse statement: Select * from Jabodetabek_Sales_Customers where acc_id in (’5300027541′,’5300058807′,’5300062475′,’…’). Too Many Constants in Subexpressions (Maximum is 255). Ternyata query ‘IN’ di mapinfo hanya mampu menerima 255 parameter. Lebih dari itu akan muncul error
Salah satu cara mengatasi ini adalah memecah queri menjadi beberapa bagian. String parameter yang akan digunakan dalam query, (di contoh ini diambil dari database), kita simpan dalam StringCollection untuk memudahkan mengetahui jumlah parameter dan memisahkannya. xx adalah variabel stringCollection yang akan digunakan.
Read the rest of this entry
MapXtreme: Membuat LayerControl Ver.2.0
Sebelumnya, saya telah menulis bagaimana membuat layercontrol di MXT. Versi 2 ini merupakan versi revisi dari versi 1 yang pernah saya tulis sebelumnya. Saya banyak mengalami kesulitan ketika menerapkan v.1. Karena itu saya memutuskan untuk melakukan perubahan kodenya. Apa yang saya catat disini, hanya bagian yang di ubah. Untuk membuat layercontrol secara lengkap, silahkan baca tulisan sebelumnya.
Kesulitan dari LayerControl v.1
- Daftar layer tergantung pada data yang disiapkan di database. Baca Bagian 1. Sehingga ketika ada layer peta yang ditambahkan di Workspace manager, layer baru ini tidak secara otomatis ditambahkan ke LayerControl.
- Di client (javascript), proses dari MapControl ke LayerControl (Baca Bagian 3), checkbox yang ada di layercontrol didefinisikan satu persatu, kita perlu tahu ClientID dari masing-masing checkbox. Jika layer peta ditambahkan di workspace manager, susunan layer akan berubah dan ini berarti harus merubah kode javascript secara manual.
Berdasarkan 2 hal di atas, saya membuat perubahan
- Daftar layer tidak mengacu pada database yang telah disiapkan sebelumnya, tetapi langsung mengacu pada file MWS. Sehingga, jika ada layer baru ditambahkan di workspace manager, secara otomatis layer baru tersebut akan masuk di layercontrol.
- Kode javascript untuk proses dari mapcontrol ke layercontrol tidak lagi secara manual. Kita tidak perlu tahu ClientID dari masing-masing checkbox, Javascript akan melakukan looping ke tiap baris di layercontrol dan akan menandai chekbox yang sesuai sesuai kondisi layer yang ada.
Menampilkan Peta Berbeda Dalam Satu Aplikasi MapXtreme
Menampilkan peta yang berbeda disini maksudnya adalah, jika kita mempunyai 2 atau lebih peta yang tidak terkait. Misal jika peta pertama tampil, maka peta kedua dihilangkan, atau jika peta kedua tampil maka peta pertama dihilangkan atau peta pertama menggunakan batas administrasi sedang peta kedua menggunakan batas yang lain sehingga kedua peta diperlakukan berbeda. Setidaknya ada 2 cara untuk membuat hal semacam ini
- Membuat file MWS berbeda. Masing-masing peta dibuat MWS tersediri
- Membuat 1 file MWS dengan beberapa Map alias.
Disini saya tulis mengenai cara kedua, Menggunakan 1 file MWS untuk beberapa peta.
Read the rest of this entry