Membuat CRUD dengan LINQ C#

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>  

berikut merupakan tampilan yang akan muncul



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

  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


Load comments