Hidden Column di Gridview

Aku pernah membuat aplikasi ASP.net. Di aplikasi tersebut aku menambahkan tool gridview untuk menampilkan data. Gridview aku buat dengan 4 kolom dan kolom ke-4 sengaja aku sembunyikan (hidden).

Masalah muncul ketika aku membuat prosedur Gridview_RowDataBound. Di prosedur ini aku ingin mengambil nilai dari dari kolom ke-4 dengan cara berikut ini

Dim simbol as String = e.Row.Cell(3).Text

Tapi aku tidak mendapatkan nilai yang aku inginkan. Jadi bagaimana mendapatkan nilai dari kolom yang disembunyikan tersebut?

Sebenarnya ada berbagai macam trik yang bisa dipakai. Salah satu trik ini aku dapatkan dari Wely. Cukup dengan kode berikut:

Dim simbol as String = DirectCast(DirectCast(DirectCast(DirectCast(e.Row, _
System.Web.UI.WebControls.GridViewRow).DataItem, _
System.Object), System.Data.DataRowView).Row, _
System.Data.DataRow).ItemArray(3)

Angka 3 dalam ItemArray(3) menunjukkan indek kolom sesuai urutan kolom dari query ke database, BUKAN urutan kolom di gridview. Jadi sebenarnya nilai diambil bukan dari gridview, tapi dari dataset.

Happy coding. Thanks buat Wely.

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 22 Oktober 2009, in ASP.net and tagged , , , . Bookmark the permalink. 12 Komentar.

  1. salam kenal,,
    ga ngerti itu apaan
    oh ya,, kalo mau ebook gratis langsung ke blog aku aja
    banyak ebook gratis buat blogger,,
    skalian kalo tukeran link boleh ga?

  2. kyknya sy nanya di sini aja ya mas yuniar..
    gini, sy punya 2 tabel
    pertama tabel siswa : nis, nama, kelas
    kedua tabel nilai : nis, nilai

    nahh saya ingin insert nilai siswa dengan cara “inserting multiple rows”,
    sy tuh penginnya insert nilai sekaligus untuk 1 kelas.
    pertama, sy membuat gridview seperti gmbar berikut
    http://i49.tinypic.com/23sc8yt.jpg
    kedua, pilih kelas, dan pas “klik view” maka tertampil gridview untuk kelas yang terpilih

    untuk kolom NIS dan nama, sy ambil dari database siswa di atas (sy pke sql server..) sedang untuk kolom nilai itu berupa textbox yg nantinya akan sy masukin nilainya.
    sy tuh penginnya insert nilai sekaligus sejumlah siswa yg ada digridview.. (jd klik “submit” nya cuma sekali), jd klo sekelas ada 20 siswa, maka akan langsung terinsert ke tabel nilai sebanyak 20 nilai

    hmm.. saya bingung gimana cara ngambil data untuk setiap baris tu gimana??
    mohon bantuannya mas…
    maksih sebelumnya… ^_^

    • untuk mengambil data di tiap baris, yahya harus membuat perulangan ke masing-masing baris.
      Alurnya kira-kira seperti ini, di tiap baris, temukan textboxnya. Setelah dapat nilainya, baru di simpan ke database.
      Terus lanjutkan ke baris berikutnya. Berulang sampai seluruh baris dibaca

      Contohnya kodenya seperti ini

      For i As Byte = 0 To GridView1.Rows.Count - 1
      	Dim rw As GridViewRow = GridView1.Rows(i)
      	
      	'untuk mendapatkan nilai textbox di gridview, Di inisialisasi dulu sebuah textbox baru
      	'lalu isikan informasinya berdasarkan textbox yang ada di kolom 2 baris i
      	Dim tb as Textbox = CType(rw.Cells(2).FindControl("textboxID"), TextBox)
      	'textboxID = ID dari textbox yg ada di gridview (kolom3)
      	
      	Dim nilai as string = tb.Text.ToString()
      	'kalo nilainya udah dapat, tinggal menjalankan prosedur untuk simpan ke database
      	SimpanData()
      	'lanjutkan ke baris berikutnya
      Next
      
  3. makasih sebelumnya mas,
    tp wktu sy jalanin, masih ada error.
    sy dah nanya mbek nyari2 di eyang gugel tp belom jg dapetin solusi yg tepat. jd sy nanya dimari lagi nihh..

    jadi errornya pas mau insertin datanya muncul kyk gini. “System.Data.SqlClient.SqlException: Implicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query”

    mohon bimbingannya untuk mendapatkan solusinya.. ^_^

    • Coba di cek di databasenya… kemungkinan error itu terjadi karena yahya memasukkan data bertipe string, sedangkan kolom di database didefinisikan BUKAN string/varchar. Makanya database nya gak mau terima

  4. o ya mas. ternyata emang ada kesalahan di type databasenya..
    padahal kemaren wes tak uprek2 koq ndak jalan
    giliran nanya di sini koq langsung wusshhh… mlaku..
    mksih mas yuniar..

    pertanyaan lagi (waduhh.. nanyaku banyak banged gini ya…😦
    yg script untk ngambil kolom nilai dah jalan
    nahh. yg untuk ngambil data di kolom “NIS” gmn ya??
    datanya kan diambil dr database (tidak diisi sendiri seperti di kolom nilai yg menggunaka textbox)
    hhmm.. mohon bimbingannya mas… ^_^
    ato cara ngakalinnya gmn?? mksih sebelumnya

    ni saya sertakan source di gridviewnya

    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="NIS"
    DataSourceID="SqlDataSource4" Font-Names="Calibri" Font-Size="11pt" Width="376px" Height="160px">
    <Columns>
    <asp:BoundField DataField="NIS" HeaderText="NIS" InsertVisible="False" ReadOnly="True"
    SortExpression="NIS" />
    <asp:BoundField DataField="nama" HeaderText="nama" SortExpression="nama" />
    <asp:TemplateField HeaderText="Nilai">
    <ItemTemplate>
    <asp:TextBox id="TextBox1" runat="server" Width="50" ></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateField>

    </Columns>
    </asp:GridView>

    • Caranya sama saja. Di dalam kode contoh looping yang saya tulis sebelumnya, tinggal di tambahin
      rw.cell(nomorkolom).text
      jadinya seperti ini:

      dim nis as string = rw.cell(0).text

  5. sip mas yuniar,,
    makasi banyak

  6. mz,,,
    mw nanya,,,,
    pertanyaanku hampir sama dengan yang di atas “System.Data.SqlClient.SqlException: Implicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query”
    emg data yng dimasukkan berupa angka,
    cara mengkonvertnya bagaimana,,,?
    uda pke val(me.txt_pokok.text)
    g jln
    pke pas waktu di insert iontonya juga g jalan
    d databsasex pke varbinary, juga tetep g jalan,,,,

    mhon bantuannya,,,,

  7. Siang mas Yuniar, mau tnya seputar hidden kolom di asp .net
    bisa kasih penjelasan lebih gak terkait sourcenya untuk hidden kolom? krn yg saya tngkap pnjelasan mas diatas lebih kepada mengambil nilai kolom yg di hidden.

    terus, apakah kita bisa membuat judul kolom dinamis berdasarkan database di asp .net?
    misalkan: saya punya tabel di database dengan nama judulkolom. kemudian, value yang tersimpan tadi akan dipanggil di gridview sebagai judul kolom.

    mhon penjelasan dan jawabannnya mas, terima kasih..

    • @Festi, benar, mengambil value dari kolom yg di hidden. Karena asp.net tidak merender html untuk kolom yg di hidden, kolom itu bener2 ilang. Jadi kita gak bisa ngetrace informasinya dari tag htmlnya. Maka yg aku lakukan adalah mengambil datanya dari tempat lain, dari source data (dataitem).

      Judul kolom dinamis?? tentu 100% bisa. kamu bisa merubah2 nama kolomnya lewat kode.
      coba aja di googling tentang dynamic column name in gridview

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: