Mengisi ExtJs Combobox dengan menggunakan ASP .Net (CSharp) Web Service

20 Jun

Fiuhh, dah lama ga update blog. Postingan kali ini mengenai web programming. Intinya saya waktu itu lagi butuh cara untuk mengisi combobox yang dibuat pake ExtJs (Sencha) dengan menggunakan ASP .Net Web Service. Berhubung kebanyakan contohnya pake PHP, jadi saya kudu muter2 cari referensi, terutama yang berhubungan dengan ExtJs, ASP .Net, dan JSON (sebagai media pertukaran data). Setelah Googling kesana kemari, berikut cara sederhana untuk mengisi Combobox ExtJs dengan ASP .Net (C#). Disini saya menggunakan .Net Framework 3.5 dan ExtJs versi 3.2.0.

Berikut ini adalah gambar struktur direktori yang saya pakai:

Pastikan library ExtJs sudah diimport ke dalam page dan pada kode kali ini, Combobox akan saya render ke div container dengan id=”content”.

Ok, mari berandai-andai saya punya database (MS SQL) dengan nama Test dan sebuah tabel nama ms_prop yang berisi daftar kode dan nama propinsi seperti tampak pada gambar dibawah ini. Asumsi database berada di local.

Pertama, saya coba dengan membuat c# class sederhana. Class ini saya letakkan di file WebService.asmx setelah class WebService. Class ini saya beri nama ComboBoxNameValue dan berisi method2 getter dan setter untuk nama dan value combo box item.

Langkah berikutnya adalah membuat method untuk mengambil data dari database dan mengembalikan datanya ke dalam combo box. Berikut adalah kodenya (oya pastikan komen pada baris [System.Web.Script.Services.ScriptService] dihilangkan).

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true, XmlSerializeString = true)]
    public ComboBoxNameValue[] GetData()
    {
        System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection();
        conn.ConnectionString = "Data Source=(local);Initial Catalog=Test;Persist " +
                                "Security Info=True;User ID=sa;Password=sasa";

        System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand();
        command.Connection = conn;
        command.CommandText = "SELECT * FROM Test.dbo.ms_prop";

        // create list collection type of ComboBoxNameValue
        List<ComboBoxNameValue> l = new List<ComboBoxNameValue>();

        conn.Open();

        using (System.Data.SqlClient.SqlDataReader reader =
            command.ExecuteReader(System.Data.CommandBehavior.CloseConnection))
        {
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    ComboBoxNameValue c = new ComboBoxNameValue();
                    c.Value = reader["kode_prop"].ToString();
                    c.Name = reader["propinsi"].ToString();

                    // add comboboxnamevalue to the list
                    l.Add(c);
                }
            }
        }

        return l.ToArray();
    }

Setelah selesai membuat method di WebService.asmx, berikut adalah menulis kode Javascriptnya sebagai berikut:

Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';

Ext.onReady(function() {
    Ext.QuickTips.init();

    var store = new Ext.data.JsonStore({
        proxy: new Ext.data.HttpProxy({
            url: 'WebService.asmx/GetData',
            method: 'GET',
            headers: { 'Content-type': 'application/json; charset=utf-8;' }
        }),
        // root dari Json Data yang dihasilkan oleh ASP .NET
        root: 'd',
        fields: [ 'Name', 'Value' ],
        autoLoad: true
    });

    var combo = new Ext.form.ComboBox({
        store: store,
        displayField: 'Name',
        valueField: 'Value',
        // set mode ke local untuk me-load
        // data secara manual
        mode: 'local',
        emptyText: 'Pilih propinsi',
        renderTo: 'content'
    });
});

Simpan kode tersebut lalu jalankan webform Default.aspx. Kalau berhasil maka akan tampak hasilnya seperti gambar berikut:

Dan berikut ini adalah contoh JSON data yang dihasilkan:

{"d":[{"__type":"ComboBoxNameValue","Name":"Bali","Value":"BAL"},
{"__type":"ComboBoxNameValue","Name":"Bangka Belitung","Value":"BKB"},
{"__type":"ComboBoxNameValue","Name":"Bengkulu","Value":"BKL"},
{"__type":"ComboBoxNameValue","Name":"Banten","Value":"BTN"},
{"__type":"ComboBoxNameValue","Name":"DI Yogyakarta","Value":"DIY"},
{"__type":"ComboBoxNameValue","Name":"Gorontalo","Value":"GOR"},
.....,
{"__type":"ComboBoxNameValue","Name":"Sumatera Utara","Value":"SMU"}]}

Setelah muter2 nyari2 cara agar ASP .NET Web Services mau mengembalikan data sebagai JSON (default sebagai XML) adalah dengan men-set Content Type headers pada HttpProxy dan menggunakan method GET (CMIIW).

Maaf kalo ada yang kurang tepat. Maklum newbie :D. Semoga bermanfaat.

Sumber:

15 Responses to “Mengisi ExtJs Combobox dengan menggunakan ASP .Net (CSharp) Web Service”

  1. ocha 21. Jun, 2010 at 11:18 am #

    pusing… O_o

    • ojat 21. Jun, 2010 at 12:36 pm #

      hahha, jgn pusing2 dong…. :)) duduk dulu … tarik napas :D

  2. Cloud 01. Jul, 2010 at 5:36 am #

    wow.. makhluk apakah gerangan ExtJS… *googling dulu*

    • ojat 01. Jul, 2010 at 10:54 am #

      makhluk luar angkasa :))

  3. Hedon 01. Jul, 2010 at 10:54 am #

    wah mantap banget codingnya…sayang belum belajar asp…jadi..belum gitu ngerti…hehe

    • ojat 01. Jul, 2010 at 10:55 am #

      trims bro :D saya jg lagi belajar2… masih pemula :D

  4. Puguh Prasetyo 08. Jul, 2010 at 9:50 pm #

    Ini baru kelihatan programmer nya,,, soalnya biasanya yg nampak fotografer nya… hehehe… sukses yah mas…

  5. RIDU 10. Jul, 2010 at 11:18 am #

    OMG, brb ya mas saya mau minum obat sakit kepala dulu :p

    • phiy 13. Jul, 2010 at 10:01 am #

      ikutan du xD
      wah, mas ojat, ini konsumsi anak IT. Aku udah pusying duluan. hehe

    • ojat 25. Jul, 2010 at 9:32 am #

      grrrrrrrrrrrrrrrrrrrr >.<

  6. massigit 24. Jul, 2010 at 8:53 pm #

    ayooo.. tetap semangat ngeblog mas.. )

    • ojat 25. Jul, 2010 at 9:31 am #

      waah, trims mas sigit :D lagi agak kendor nih semangatnya heheh

  7. jasmine 27. Jul, 2010 at 9:58 pm #

    nggak ada ilmu bumi yang nggak bisa di pelajari,selagi aku masih hidup,akan terus dan terus belajar

  8. RayNocturne 07. Aug, 2010 at 4:01 pm #

    pliss jatt…
    not progamming again T_T

Leave a Reply