Friday, August 17, 2012

Get Value from Hidden Bound Field

Dalam ASP.NET, dalam menggunakan GridView untuk menampilkan list dari database merupakan pilihan yang praktis dan sering digunakan karena kemudahan dan sangat simpel. Hal ini dikarenakan GridView hanya tinggal mengeset datasource, apakah dari list atau dari array, kemudian tinggal di-bind ke GridView.

Ada beberapa cara untuk melakukan pengaturan kolom yang tertampil. Jika GridView standar akan menampilkan semua field yang ada dalam datasource. Namun, jika GridView diset AutoGenerate false maka dia hanya akan menampilkan kolom sesuai dengan yang didaftarkan. Pendaftaran kolom yang tertampil pada GridView dapat dilakukan dengan Bound Field atau dengan Template Field.

Memang yang paling enak adalah dengan menggunakan Template Field. Jika ingin menampilkan kolom sebagai isi dari field database, Template Field tinggal diisi dengan Item Template, yang menggunakan Label. Selain itu Item Template juga bisa menggunakan Hidden Field, Hyperlink, Button dan diisi dengan kontrol-kontrol yang lain. Dan juga, dengan menggunakan Template Field bisa digunakan untuk melakukan edit GridView dengan menggunakan Edit Item Template. (GridView bisa digunakan untuk melakukan pengeditan isi, penghapusan maupun pengisian/insert query ke database dengan mudah).

Namun, dalam penggunaan Template Field terdapat juga batasan-batasan. Salah satunya yaitu menjadi tidak dapat melakukan swap terhadap row dari GridView. Jika ingin menggunakan fungsi swap row, kolom GridView harus menggunakan Bound Field. Dan masalah yang muncul adalah dalam Bound Field tidak bisa dilakukan FindControl jika dihidden seperti pada Label jika Template Field divisible false.

string ID = ((Label)this.GridView1.Rows[e.RowIndex].FindControl("LabelID")).Text;

Kode diatas bisa digunakan untuk mengambil isi dari label yang berada pada kolom Template Item yang di visible false. Namun, hal tersebut tidak bisa mengambil isi dari ID dari Bound Field yang di visible false (dengan fungsi FindControl). Terus bagaimana cara mengambil isi dari Bound Field yang di visible false? Solusi yang ada adalah dengan menggunakan Data Key.

Data key merupakan nama field database yang ingin diambil nilainya jika Bound Field akan di-hidden (visible false).

DataKeyNames="DiscountID"

Data key bisa berjumlah 1 maupun 2 tergantung dengan kebutuhan. Untuk mengambil nilainya adalah dengan menggunakan perintah berikut:

int ID = (int)GridView1.DataKeys[e.RowIndex].Value;

Data key juga sangat penting pada Template Field ketika akan menggunakn fungsi Edit Template. Jika edit GridView hanya menggunakn TextBox mudah dilakukan karena TextBox mendukung melakukan Eval/Bind. Tetapi bagaimana dengan DropDownList jika ingin dibuat di Edit Template. Memang pengisian datasource bisa dilakukan seperti biasa, namun Data Key digunakan untuk memilih SelectedValue.

Secara lengkap Edit Template dan mengisi data source dari DropDownList adalah dengan menggunakan kode berikut:

DropDownList ddlSAP = (DropDownList)e.Row.FindControl("editsapddl");

var isiDDL = SAPOrderTypeManager.GetAllSapOrderTypes();
if (ddlSAP != null)
{
ddlSAP.DataSource = isiDDL;
ddlSAP.DataTextField = "SAPTypeID";
ddlSAP.DataBind();
ddlSAP.SelectedValue = GridView1.DataKeys[e.Row.RowIndex].Values[0].ToString();
}

No comments:

Post a Comment