LINQ adalah singkatan dari Language Integrated Query,secara singkat LINQ dapat didefinisikan sebagai sebuah metode yang memudahkan dan menseragamkan cara pengaksesan data. Jadi bisa dibilang LINQ ini adalah framework yang dapat menyeragamkan pola pikir Software developer didalam sebuah team.
Pada artikel kali ini saya akan menjelaskan bagaiman membuat sebuah fungsi CRUD dengan menggunakan metode LINQ
Database
Buat sebuah table pada database anda, pastikan table memiliki primary key karena untuk LINQ sangat membutuhkan hal tersebut.
CREATE TABLE [dbo].[tutorial_crud](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[nama] [nvarchar](200) NOT NULL,
[alamat] [nvarchar](200) NOT NULL,
CONSTRAINT [PK_tutorial_crud] PRIMARY KEY CLUSTERED
( [id] ASC ))
Koneksi LINQ ke Database
Buat sebuah file DBML pada projek anda, ADD > New Item
Setelah membuat file dbml tersebut, kita selanjutnya membuat koneksi klik Data Connection pada tab server explorer dan pilih ADD Connection
Bila sudah berhasil , anda perlu melakukan drag and drop Table yang anda buat sebelumnya ke file DBML anda lalu save
Bagian html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h2>TUTORIAL CRUD LINQ</h2>
<hr />
<h4>
<asp:Label ID="lblaksi" runat="server" Text="Tambah User"></asp:Label>
</h4>
<span style="color:#f00"><asp:Label ID="lblnotifikasi" runat="server" Text=""></asp:Label></span><br />
<asp:HiddenField ID="hdnID_row" runat="server" />
<asp:TextBox ID="txtnama" runat="server" placeholder="nama"></asp:TextBox><br /><br />
<asp:TextBox ID="txtalamat" runat="server" placeholder="alamat"></asp:TextBox><br /><br />
<asp:Button ID="btnsubmit" runat="server" Text="Submit" OnClick="btn_add_click" />
<asp:Button ID="btncancel" runat="server" Text="Cancel" Visible="false" OnClick="btncancel_Click" />
<hr />
<asp:GridView ID="GridViewData" runat="server" AutoGenerateColumns="False" CssClass="Grid" EmptyDataText="No Data found" ShowHeaderWhenEmpty="True" AllowPaging="True" PagerSettings-Visible="true" PageSize="15" BackColor="White" BorderColor="#DEDFDE" BorderStyle="None"
BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Vertical">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField HeaderText="ID." HeaderStyle-Width="20px">
<ItemTemplate>
<asp:Label ID="lblid" runat="server" Text='<%# Container.DataItemIndex +1 %>' Width="20px"></asp:Label>
<asp:HiddenField ID="hdnID" runat="server" Value='<%# Eval("ID").ToString() %>' />
</ItemTemplate>
<HeaderStyle Width="20px"></HeaderStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="NAMA">
<ItemTemplate>
<asp:HiddenField ID="hdnNama" runat="server" Value='<%# Eval("NAMA").ToString() %>' />
<asp:Label ID="lblnama" runat="server" Text='<%# Eval("NAMA").ToString() %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ALAMAT">
<ItemTemplate>
<asp:HiddenField ID="hdnAlamat" runat="server" Value='<%# Eval("ALAMAT").ToString() %>' />
<asp:Label ID="lblalamat" runat="server" Text='<%# Eval("ALAMAT").ToString() %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btnEdit_0" runat="server" Text="Edit" OnClick="btnEdit_click"></asp:LinkButton>
<asp:LinkButton ID="btnDelete_0" runat="server" Text="Delete" OnClick="btndelete_Click" CausesValidation="false" OnClientClick='<%# Eval("id", "return confirm(\"Delete data : {0}?\");") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#CCCC99" />
<HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
<RowStyle BackColor="#F7F7DE" />
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#FBFBF2" />
<SortedAscendingHeaderStyle BackColor="#848384" />
<SortedDescendingCellStyle BackColor="#EAEAD3" />
<SortedDescendingHeaderStyle BackColor="#575357" />
</asp:GridView>
</div>
</form>
</body>
</html>
Namespaces
berikut name spaces yang perlu di import ke aplikasi anda
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
Bind Gridview on Page load
Selanjutnya kita akan lakukan bind data yang berada pada database ke gridview pada saat Page load pertama kali
Selanjutnya kita akan lakukan bind data yang berada pada database ke gridview pada saat Page load pertama kali
protected void Page_Load(object sender, EventArgs e) {
BacaData(string.Empty);
}
//Script untuk mengisi gridview
private void BacaData(string filter) {
var DbData = new belajar_linqDataContext();
var DataList = from p in DbData.tutorial_cruds
select new {
ID = p.id, NAMA = p.nama, ALAMAT = p.alamat
};
GridViewData.DataSource = DataList;
GridViewData.DataBind();
}
Menambahkan dan Mengupdate Data
Script berikut berfungsi untuk melakukan penyimpanan data baru maupun mengupdate data yang sudah ada
protected void btn_add_click(object sender, EventArgs e) {
string nama = txtnama.Text;
string alamat = txtalamat.Text;
//mengecek form apakah textbox nama atau alamat kosong
if (string.IsNullOrEmpty(alamat) || string.IsNullOrEmpty(nama)) {
lblnotifikasi.Text = "Mohon lengkapi kolom";
return;
}
var DbData = new belajar_linqDataContext();
if (btnsubmit.Text == "Submit") {
tutorial_crud GateData = new tutorial_crud {
nama = nama,
alamat = alamat
};
try {
DbData.tutorial_cruds.InsertOnSubmit(GateData);
DbData.SubmitChanges();
BacaData(string.Empty);
lblnotifikasi.Text = "INSERT DATA BERHASIL";
txtalamat.Text = "";
txtnama.Text = "";
} catch (Exception ex) {
lblnotifikasi.Text = "GAGAL MENGINSERT DATA \n" + ex;
}
} else {
// script linq untuk mencari data yang memiliki ID yang sama
List < tutorial_crud > GateData = (from c in DbData.tutorial_cruds where c.id == Convert.ToInt32(hdnID_row.Value) select c).ToList();
// script untuk membuat perubahan / update data
foreach(tutorial_crud gt in GateData) {
gt.nama = txtnama.Text;
gt.alamat = txtalamat.Text;
}
try {
DbData.SubmitChanges();
BacaData(string.Empty);
lblnotifikasi.Text = "UPDATE DATA BERHASIL";
txtalamat.Text = "";
txtnama.Text = "";
btnsubmit.Text = "Submit";
btncancel.Visible = false;
} catch (Exception ex) {
lblnotifikasi.Text = "GAGAL MENGUPDATE DATA \n" + ex;
}
}
}
Mengambil Data pada Gridview dan menampilkan ke Textbox
protected void btnEdit_click(object sender, EventArgs e) {
GridViewRow grdrow = (GridViewRow)((LinkButton) sender).NamingContainer;
String dtID = (grdrow.FindControl("hdnID") as HiddenField).Value;
var DbData = new belajar_linqDataContext();
// script linq untuk mencari data yang memiliki ID yang sama
List < tutorial_crud > GateData = (from c in DbData.tutorial_cruds where c.id == Convert.ToInt32(dtID) select c).ToList();
// script untuk menampilkan data ke textbox
foreach(tutorial_crud gt in GateData) {
txtnama.Text = gt.nama;
txtalamat.Text = gt.alamat;
}
hdnID_row.Value = dtID;
btnsubmit.Text = "Update";
btncancel.Visible = true;
lblnotifikasi.Text = "";
}
Menghapus Data
protected void btndelete_Click(object sender, EventArgs e) {
LinkButton btn = (LinkButton)(sender);
GridViewRow grdrow = (GridViewRow) btn.NamingContainer;
int indx = grdrow.RowIndex;
String ID = (grdrow.FindControl("hdnID") as HiddenField).Value;
var DbData = new belajar_linqDataContext();
var DeleteData = from c in DbData.tutorial_cruds
where c.id == Convert.ToInt32(ID)
select c;
foreach(var detail in DeleteData) {
DbData.tutorial_cruds.DeleteOnSubmit(detail);
}
try {
DbData.SubmitChanges();
BacaData(string.Empty);
lblnotifikasi.Text = "Delete DATA BERHASIL";
} catch (Exception ex) {
lblnotifikasi.Text = "GAGAL MENGUPDATE DATA \n" + ex;
}
BacaData(string.Empty);
}
Script Lengkap CRUD Linq
protected void Page_Load(object sender, EventArgs e) {
BacaData(string.Empty);
}
//Script untuk mengisi gridview
private void BacaData(string filter) {
var DbData = new belajar_linqDataContext();
var DataList = from p in DbData.tutorial_cruds
select new {
ID = p.id, NAMA = p.nama, ALAMAT = p.alamat
};
GridViewData.DataSource = DataList;
GridViewData.DataBind();
}
protected void btn_add_click(object sender, EventArgs e) {
string nama = txtnama.Text;
string alamat = txtalamat.Text;
//mengecek form apakah textbox nama atau alamat kosong
if (string.IsNullOrEmpty(alamat) || string.IsNullOrEmpty(nama)) {
lblnotifikasi.Text = "Mohon lengkapi kolom";
return;
}
var DbData = new belajar_linqDataContext();
if (btnsubmit.Text == "Submit") {
tutorial_crud GateData = new tutorial_crud {
nama = nama,
alamat = alamat
};
try {
DbData.tutorial_cruds.InsertOnSubmit(GateData);
DbData.SubmitChanges();
BacaData(string.Empty);
lblnotifikasi.Text = "INSERT DATA BERHASIL";
txtalamat.Text = "";
txtnama.Text = "";
} catch (Exception ex) {
lblnotifikasi.Text = "GAGAL MENGINSERT DATA \n" + ex;
}
} else {
// script linq untuk mencari data yang memiliki ID yang sama
List < tutorial_crud > GateData = (from c in DbData.tutorial_cruds where c.id == Convert.ToInt32(hdnID_row.Value) select c).ToList();
// script untuk membuat perubahan / update data
foreach(tutorial_crud gt in GateData) {
gt.nama = txtnama.Text;
gt.alamat = txtalamat.Text;
}
try {
DbData.SubmitChanges();
BacaData(string.Empty);
lblnotifikasi.Text = "UPDATE DATA BERHASIL";
txtalamat.Text = "";
txtnama.Text = "";
btnsubmit.Text = "Submit";
btncancel.Visible = false;
} catch (Exception ex) {
lblnotifikasi.Text = "GAGAL MENGUPDATE DATA \n" + ex;
}
}
}
protected void btnEdit_click(object sender, EventArgs e) {
GridViewRow grdrow = (GridViewRow)((LinkButton) sender).NamingContainer;
String dtID = (grdrow.FindControl("hdnID") as HiddenField).Value;
var DbData = new belajar_linqDataContext();
// script linq untuk mencari data yang memiliki ID yang sama
List < tutorial_crud > GateData = (from c in DbData.tutorial_cruds where c.id == Convert.ToInt32(dtID) select c).ToList();
// script untuk menampilkan data ke textbox
foreach(tutorial_crud gt in GateData) {
txtnama.Text = gt.nama;
txtalamat.Text = gt.alamat;
}
hdnID_row.Value = dtID;
btnsubmit.Text = "Update";
btncancel.Visible = true;
lblnotifikasi.Text = "";
}
protected void btncancel_Click(object sender, EventArgs e) {
btncancel.Visible = false;
btnsubmit.Text = "Submit";
}
protected void btndelete_Click(object sender, EventArgs e) {
LinkButton btn = (LinkButton)(sender);
GridViewRow grdrow = (GridViewRow) btn.NamingContainer;
int indx = grdrow.RowIndex;
String ID = (grdrow.FindControl("hdnID") as HiddenField).Value;
var DbData = new belajar_linqDataContext();
var DeleteData = from c in DbData.tutorial_cruds
where c.id == Convert.ToInt32(ID)
select c;
foreach(var detail in DeleteData) {
DbData.tutorial_cruds.DeleteOnSubmit(detail);
}
try {
DbData.SubmitChanges();
BacaData(string.Empty);
lblnotifikasi.Text = "Delete DATA BERHASIL";
} catch (Exception ex) {
lblnotifikasi.Text = "GAGAL MENGUPDATE DATA \n" + ex;
}
BacaData(string.Empty);
}
Refrensi :ASP SNIPSNET