Read XML dengan Language Integrated Query(LINQ) pada C#

Mungkin kebanyakan dari kita sudah terbiasa menggunakan SQL query untuk melakukan pengelolaan data. Tapi bagaimana jika kita dihadapkan dengan data dengan berupa format lain, pada kasus ini XML file… Yah, di .netframework sendiri sudah ada sebuah cara mudah membaca XML file yang query nya mirip-mirip dengan SQL query, cara tersebut disebut LINQ(Language Integrated Query). Untuk penjelasan LINQ silahkan anda searching di internet yak 😀 , saya disini akan mendemokan sedikit cara menggunakan LINQ untuk membaca XML file..

Okeh, pertama-tama buka visual studio anda, dan buat project baru..

Setelah itu buatlah sebuah file XML dengan cara klik kanan dan pilih new item lalu pilih xml file. Setelah itu isilah XML tersebut dg format seperti berikut:

<?xml version="1.0" encoding="utf-8" ?>
<Indonesia>
  <prov nama="Sumatera Selatan">
    <kota>Palembang</kota>
    <kota>Prabumulih</kota>
  </prov>
  <prov nama="Jawa Barat">
    <kota>Bogor</kota>
    <kota>Depok</kota>
    <kota>Bandung</kota>
  </prov>
  <prov nama="DKI Jakarta">
    <kota>Jakarta Timur</kota>
    <kota>Jakarta Barat</kota>
    <kota>Jakarta Selatan</kota>
    <kota>Jakarta Utara</kota>
  </prov>
</Indonesia>

Setelah itu rancanglah tampilan di Form1 dengan memasukkan 1 buah combobox dan 1 buah datagridview. Sebelumnya, tambahkan code berikut agar dapat menggunakan fitur-fitur LINQ untuk membaca XML file:

using System.Xml;
using System.Xml.Linq;
using System.IO;

Buat sebuah code yang mengarahkan pembacaan file pada file xml yang kita buat tadi :

XDocument data = XDocument.Load(Application.StartupPath + @"\..\..\indonesia.xml");

lalu buatlah sebuah fungsi yang berguna untuk memasukkan list nama-nama provinsi dari file XML :

        private void setCombo()
        {
            var prov = from a in data.Descendants("prov")
                       select a;
            foreach (var b in prov)
            {
                comboBox1.Items.Add(b.Attribute("nama").Value);
            }
            comboBox1.SelectedIndex = 0;
        }

Lalu buat sebuah fungsi yang memasukkan list-list kota-kota dari provinsi yang terpilih seperti berikut:

        private void setData()
        {
            dataGridView1.RowCount = 1;
            var prov = from a in data.Descendants("prov")
                       where a.Attribute("nama").Value == comboBox1.SelectedItem.ToString()
                       select a;

            var kab = from b in prov.Descendants("kota")
                      select b;

            int i = 0;
            foreach (var k in kab)
            {
                this.dataGridView1.RowCount++;
                this.dataGridView1[0, i].Value = k.Value;
                i++;
            }
        }

Lalu masukkan kedua fungsi tersebut di contructor, agar setiap form1 dibuka kedua fungsi tersebut dijalankan. Sehingga contructor nya akan menjadi seperti berikut:

 public Form1()
        {
            InitializeComponent();
            setCombo();
            setData();
        }

Lalu kita masukkan fungsi “setData()” di dalam event combobox_change agar setiap kita memilih provinsi baru, maka datagrid akan berganti isinya sesuai dengan provinsi yang terpilih. Sehingga menjadi seperti berikut:

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            setData();
        }

Selesai…

setelah selesai, maka tampilannya akan seperti berikut:

Selamat mencoba, semoga membantu… 😀

Anda bisa men download source code lengkapnya disini.

Advertisements

Mengetahui waktu proses pada C#

Berikut beberapa cara untuk mengetahui waktu berjalannya suatu proses di dalam sebuah program dalam C#.

Pertama-tama definisikan dulu :   using System.Diagnostics;

Lalu di baris program yang ingin kita ketahui waktu eksekusi ny, kita masukkan code beriktu:

            Stopwatch timerr = new Stopwatch();
            timerr.Start();
            {Code proses yang ingin dihitung waktunya}

            timerr.Stop();

 

Setelah dibuat code tersebut, program akan mencatat waktu yang digunakan saat melakukan proses di dalam program. Jika kita ingin melihat hasilnya(waktu proses), kita dapat menampilkannya dengan cara menampilkan nilai “timerr.Elapsed.ToString();”…

 

Selesai… Selamat mencoba,…

Somoga membantu 😀

Pengaturan halaman home pada user sebelum dan sesudah login pada yii framework

Pada beberapa kasus kadang aplikasi yang kita buat mengharuskan user login terlebih dahulu sebelum user bisa masuk ke dalam aplikasi tersebut. Maka dari itu kita harus melakukan pengaturan seperti berikut :

  • Jika user belum melakukan login, maka dia akan langsung disuguhkan halaman login saat memasuki web aplikasi tersebut.
  • Jika user sudah melakukan login, maka dia akan langsung disuguhkan halaman home.
Baik mari kita modifikasi aplikasi kita….
Pertama-tama silahkan buka controller yang menghandle halaman “login” dan “home” yaitu di “protected/controllers/SiteController.php”. Setelah itu tambahkan kode berikut di atas   “public function actions()”
	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl',
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',
				'actions'=>array('error','contact','login','captcha'),
				'users'=>array('*'),
			),
			array('allow',
				'actions'=>array('index','logout','update'),
				'users'=>array('@'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

Selesai… Berikut  penjelasannya:

Mungkin anda terkejut melihat betapa singkatnya code yang kita tambahkan, sebagian dari anda juga mungkin berpikir bahwa kita akan mengotak-atik bagian views/model. Yah, dalam penjelasan di atas, kita hanya perlu melakukan manipulasi di kode controller. Kita cukup memberi hak akses pada masing-masing halaman yang akan di akses. Jadi kita cukup memberikan access rule pada halaman home dimana kita hanya mengizinkan halaman home hanya bisa di akses oleh user yang telah melakukan login. Jika user belum login, maka secara otomatis user akan dilempar ke halaman login…

Yak, selamat mencoba 😀 ….

Semoga membantu….

2 model 1 form… pada yii framework…

Pada beberapa kasus, terkadang ada masalah dimana kita harus menginput nilai dari 2 buah model/table dalam satu form. Tentu saja hal ini dapat kita lakukan dengan mudah di Yii framework. Berikut cara nya :

Pada postingan saya kali ini, saya akan asumsikan kita memiliki 2 buah table di dalam satu database, misal table “satu” dan table “dua”. Saya asumsikan nilai Primary key pada table “dua” adalah sama dengan nilai Primary key pada tabel “satu”. Dan nama attribute Primary Key nya adalah “id”.

Pertama-tama, kita harus membuat model pada masing-masing tabel yang ingin dimasukkan(tentu hal ini bisa kita lakukan dengan menggunakan gii untuk mempermudah :D). Setelah itu akan ada dua buah model, yaitu model “Satu” dan model “Dua”. Lalu dengan menggunakan gii, anda buat sebuah code operasi CRUD dengan menggunakan CRUD generator yg ada dalam fitur gii(ingat cukup salah satu CRUD saja, misal CRUD utk model “Satu” atau CRUD untuk model “Dua”). Dalam postingan ini saya akan membuat CRUD untuk model “Satu”.
Setelah itu akan terbentuk sebuah controller dari model “Satu” pada protected/controller, silahkan anda buka controller tersebut. Coba lihat function “actionCreate()”, anda akan melihat code seperti berikut:

		$model=new Satu;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Satu']))
		{
			$model->attributes=$_POST['Satu'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->id));
		}

		$this->render('create',array(
			'model'=>$model,
		));

Nah, silahkan rubah code tersebut menjadi seperti berikut:

$model=new Satu;
		$model2=new Dua;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Satu'],$_POST['Dua']))
		{
			$model->attributes=$_POST['Satu'];
			$model2->attributes=$_POST['Dua'];

		        $valid=$model->validate();
		        $valid=$model2->validate() && $valid;

			if($valid)
			{
				if($model->save(false))  
				{  
					$model2->duasatu = $model->satusatu;  
					$model2->save(false);
					$this->redirect(array('view','id'=>$model->satusatu));
				}
			}	
		}

		$this->render('create',array(
			'model'=>$model,
			'model2'=>$model2,
		));

Penjelasan:

($model2=new Dua; ) ini maksud ny kita mendeklarasikan sebuah model baru yang kita ambil dari model “Dua”.

 $valid=$model->validate();
 $valid=$model2->validate() && $valid;

	if($valid)
	{
		if($model->save(false))  
		{  
			$model2->id = $model->id;  
			$model2->save(false);
			$this->redirect(array('view','id'=>$model->id));
		}
	}

Nah, $valid adalah sebuah variabel yang digunakan untuk mengecek apakah nilai yang di input oleh user di dalam form sudah memenuhi syarat dari validasi yang sudah kita tentukan. Sedangkan pernyataan yang ada di dalama “if($model->save(false))” berguna untuk melakukan penyamaan nilai Primary Key pada table “dua” sesuai dengan Primary Key pada table “satu”. Maksud dari “$model2->save(false)” adalah nilai dari model tersebut akan disimpan dalam database tanpa melakukan validasi terlebih dahulu, kenapa? karena hal tersebut sudah dilakukan pada “$valid”. Dan setelah disimpan ke dalam database, aplikasi akan langsung di arahkan ke tampilan view dari data yang sudah di masukkan tadi.. hal itu terlihat dari code “$this->redirect(array(‘view’,’id’=>$model->id));”.
Nah, sampai disini kita telah selesai membuat operasi untuk menyimpan data dari dua model yang berbeda, sekarang tinggal kita buat tampilan dari fungsi tersebut…

Membuat tampilan sendiri tidak bisa sembarangan, kita harus pastikan nilai yang ada pada tampilan harus terhubung ke model yang ada di controller tadi. Okeh, pertama-tama buka views dari operasi create yang ada pada “protected/satu/create.php”, lalu temukan code seperti beriktu: “renderPartial(‘_form’, array(‘model’=>$model)); ?>”. Setelah anda temukan, tambahkan sedikit code yang memanggil model “Dua”, sehingga akan menjadi seperti berikut:
“<!–?php echo $this->renderPartial(‘_form’, array(‘model’=>$model,’model2’=>$model2)); ?>”
Nah, model2 yang di tambahkan disana adalah nilai dari model2 yang sudah kita deklarasikan pada controller, sehingga kita bisa menghubungkan form dengan model “Dua”. Setelah itu, silahkan buka “protected/satu/_form.php”, di dalam nya mungkin akan tersedia beberapa tag html yang berguna sebagai inputan yang menampung nilai-nilai yang di masukkan user. Hanya saja disana hanya terdapat nilai inputan untuk model “Satu” saja. Nah, anda dapat menambahkan tag html untuk menampung nilai pada model “Dua” dengan cara menambahkan tag seperti berikut:

	<div class="row">
		<!--?php echo $form->labelEx($model2,'duadua'); ?>
		textField($model2,'duadua',array('size'=>30,'maxlength'=>30)); ?>
		error($model2,'duadua'); ?>
	</div>

Nah, disana anda bisa melihat pada masing-masing tag diberi $model2 yang artinya tag html tersebut dimiliki oleh model “Dua”. Sedangkan “duadua” adalah nama dari attribut pada table “Dua”.

Selesai, anda dapat mencoba melakukan operasi “Create” pada form itu….

Selamat mencoba…. semoga membantu… 😀

Pemecahan masalah PK tipe string pada yii

Pada yii, kita biasa menggunakan gii untuk menggenerate code pada model, view, controller, modul, dan form. Nah, salah satu hal yg sering kita lakukan dengan gii adalah melakukan generate code untuk operasi CRUD. Sialnya code operasi CRUD yg di generate oleh gii tidak selalu compatible dengan berbagai kondisi. Sebagai contoh,  jika kita membuat Primary Key dengan tipe numeric(angka), kita tidak akan menghadapi msalah dengan hasil code yang di generate dari gii. Tapi bila kita menggunakan primary key bertipe string(char,varchar, dll), maka kita akan mendapat masalah pada saat melakukan operasi “views” dan operasi “admin/manage”. Kenapa, karena pada code hasil generate gii, code tersebut akan mengenali suatu nilai dari PK nya dengan cara mengkonversi nilai PK ny ke dalam integer.. Bagaimana pemecahannya?? Ya, anda tinggal mengubah code yang ada pada folder protected/controllers/”controller yang anda tuju”, lalu ubah code “public function loadModel($id)” yang awal nya seperti berikut:

$model=MBahasa::model()->findByPk((int)$id);
if($model===null)
throw new CHttpException(404,’The requested page does not exist.’);
return $model;

rubah menjadi seperti berikut:

$model=MUnitKerja::model()->findByAttributes(array(‘nama attribut PK anda’=>$id));
if($model===null)
throw new CHttpException(404,’The requested page does not exist.’);
return $model;

Selesai, selamat mencoba… 😀

Membuat operasi CRUD pada yii

CRUD adalah operasi Create, read, update, dan delete pada database. Jadi tentu kita butuh database untuk menerapkan CRUD. Pertama-tama buatlah sebuat database pada phpmyadmin yg ada di webserver anda. Kemudian tambahkan table seperti berikut:

CREATE TABLE IF NOT EXISTS `coba` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nama` varchar(30) NOT NULL,
`nama_pacar` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Setelah itu buka folder aplikasi anda, pilih protected–>config–>main.php

Berikan tag /* dan */ pada kode berikut:

‘db’=>array(
‘connectionString’ => ‘sqlite:’.dirname(__FILE__).’/../data/testdrive.db’,
),

Lalu hilangkan tag /* dan */ yang ada di antara code brikut:

‘db’=>array(
‘connectionString’ => ‘mysql:host=localhost;dbname=testdrive’,
’emulatePrepare’ => true,
‘username’ => ‘root’,
‘password’ => ”,
‘charset’ => ‘utf8’,
),

silahkan rubah beberapa code diatas:

  • dbname=’isi sesuai nama database yang akan digunakan’
  • username=’isi username pada database anda’
  • password=’jika database anda punya password, isi sesuai password anda’

Setelah itu buka menu gii(lihat tutor sebelumnya). Pilih menu “Model Generator”. Isi text “table name” sesuai dengan nama table yang ingin anda masukkan ke dalam operasi(pada contoh ini kita menggunakan table: “coba”). Klik “preview”, lalu klik “generate”. Setelah sukses membuat model, maka kita akan membuat operasi CRUD. Pilih menu “CRUD Generator” pada “model Class”, masukkan nama model yang sudah kita buat tadi(pada contoh ini namanya:”Coba”). Klik “preview”, lalu klik “generate”. Selesai..

Untuk mencoba apakah yg kita lakukan berhasil atau tidak, silahkan klik “webapp” yg ada di menu atas atau langsung ketik  url http://localhost/sabithuraira/index.php. Karena kita belum membuat form login, login dengan username:”admin” dan password:”admin”. Lalu masuk ke url : http://localhost/sabithuraira/index.php?r=coba. Dan silahkan lakukan operasi CRUD dengan memilih menu “Create coba”/”manage coba” yang ada di menu halaman tersebut….

Selamat mencoba…

Saya bukanlah seorang master, hanya seorang pelajar yg mencoba sharing isi kepalanya..

Jika ada kesalahan dari yg saya buat, mohon koreksi…

Semoga membantu…

Make yii easy with gii

Ada cara instan membuat model, view, dan controller, form, dan module pada yii framework. Yaitu menggunakan gii yang sudah disediakan oleh yii framework. Kenapa gii bisa mempermudah? karena dengan gii dapat menggenerate secara otomatis baris-baris code yang ingin anda buat. Jadi ga perlu repot-repot kerja keras ngetikin baris code satu persatu… Anda cukup tentukan apa yang ingin anda buat, dan code akan dibuat otomatis oleh yii framework.. Menarik bukan??   Berikut cara penggunaanya..

Buka folder aplikasi anda, lalu pilih  protected\config\main.php.

/*
‘gii’=>array(

‘class’=>’system.gii.GiiModule’,

‘password’=>’Enter Your Password Here’,

// If removed, Gii defaults to localhost only. Edit carefully to taste.

‘ipFilters’=>array(‘127.0.0.1′,’::1′),

),

*/

Di dalam main.php anda akan menemukan code berikut:

Hilangkan tanda “/*” dan tanda “*/” yang ada di antara code tersebut.  Ganti kata-kata ‘Enter Your Password Here’ dengan password yang anda inginkan. Stelah itu ketikkan url berikut pada browser anda :

http://localhost/sabithuraira/index.php?r=gii    **sabithuraira bisa anda ganti sesuai nama aplikasi web anda.

Masukkan password yang sudah anda set di main.php tadi.

Selesai, anda tinggal memilih apa yang ingin anda buat model, module, form, controller, atau operasi CRUD(Create, Read, Update, dan Delete). Dengan menggunakan gii, semua code yang kita inginkan akan di generate secara otomatis…

Selanjutnya saya akan bahas mengenai cara menghubungkan database dan membuat operasi CRUD pada yii…

Saya bukanlah seorang master, hanya seorang pelajar yg mencoba sharing isi kepalanya..

Jika ada kesalahan dari yg saya buat, mohon koreksi…

Semoga membantu…

%d bloggers like this: