DataGridView CRUD به همراه ذخیره کردن عکس در SQL Server

CRUD

در این مقاله نشان می دهیم که چگونه DataGridView CRUD را با استفاده از C# به همراه ذخیره کردن عکس در SQL Server انجام دهیم.

مقدمه:

این مقاله شامل مطالب زیر خواهد بود:

  • در این مثال به طور مفصل می آموزیم که چگونه عملیات CRUD (Insert، Update، Select و Delete) را با استفاده از DataGridView در WinForms برای مدیریت پروفایل دانشجویی انجام می شود.
  • چگونه عکسی را برای دانشجو Insert/Edit یا Update نماییم.
  • چگونه عکس ها را از SQL Server در ستون عکس DataGridView نمایش دهیم.
  • ویرایش و حذف ستون عکس در DataGridView
  • ایجاد DataGridView به صورت داینامیک با استفاده از کلاس DataGridView Helper
  • برای اجرای عملیات CRUD از دو کلاس DAL و BizClass استفاده می کنیم.
  • چگونه عکس پروفایل دانشجو را به شکل دایره در ستون عکس نمایش دهیم.

پیش نیازها:

  • ویژوال استودیو ۲۰۱۵ – می توانید آن را از اینجا دانلود نمایید.

بخش کد:

  1. ایجاد دیتابیس و جدول

جدولی با نام StudentDetails برای عملیات CRUD روی پروفایل دانشجویی ایجاد می کنیم. اسکریپت مربوط به ایجاد جدول و دیتابیس در زیر آمده است. اسکریپت زیر را در SQL Server خود اجرا کنید. در این مثال از SQL Server 2014 استفاده نموده ایم.

	--Script to create DB,Table and sample Insert data  
	USE MASTER;  
	-- ۱) Check for the Database Exists .If the database is exist then drop and create new DB  
	IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'StudentsDB' )  
	BEGIN  
	ALTER DATABASE StudentsDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE  
	DROP DATABASE StudentsDB ;  
	END  
	  
	  
	CREATE DATABASE StudentsDB  
	GO  
	  
	USE StudentsDB  
	GO  
	  
	-- ۱) //////////// ToysDetails table  
	  
	-- Create Table  ToysDetails ,This table will be used to store the details like Toys Information  
	  
	IF EXISTS ( SELECT [name] FROM sys.tables WHERE [name] = 'StudentDetails' )  
	DROP TABLE StudentDetails  
	GO  
	  
	CREATE TABLE StudentDetails  
	(  
	   std_ID int  identity(1,1),  
	   StudentName VARCHAR(100)  NOT NULL,  
	   Email VARCHAR(100)  NOT NULL,   
	   Phone VARCHAR(100)  NOT NULL,  
	   Address VARCHAR(100)  NOT NULL,  
	   IMAGEs varbinary(MAX)  
	   CONSTRAINT [PK_StudentDetails] PRIMARY KEY CLUSTERED       
	(      
	  [std_ID] ASC      
	)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]      
	) ON [PRIMARY]    
	  
	GO  
	  
	select * from StudentDetails

بعد از ایجاد جدول، یک Stored Procedure برای عملیات CRUD ایجاد می کنیم.

-- ۱) Stored procedure to Select Student Details  
-- Author      : Shanu                                                               
-- Create date : 2015-12-01                                                                
-- Description : Student Details                                   
-- Tables used :  Student Details                                                      
-- Modifier    : Shanu                                                                 
-- Modify date : 2015-12-01                                                                  
-- =============================================    
-- exec USP_Student_Select ''  
-- =============================================                                                            
CREATE PROCEDURE [dbo].[USP_Student_Select]                                              
   (                            
     @StudentName           VARCHAR(100)     = ''   
      )                                                        
AS                                                                
BEGIN        
         select   std_ID as StdNO,  
                   StudentName as StdName,  
                   Email as Email,  
                   Phone as Phone,  
                   Address as Address,  
                   IMAGEs as StdImage  
                  
         FROM StudentDetails   
          Where     
                 StudentName like @StudentName +'%'           
          ORDER BY  
              StudentName  
           
END
                                                        
CREATE PROCEDURE [dbo].[USP_StudentID_Select]                                              
   (                            
     @std_ID          int  
      )                                                        
AS                                                                
BEGIN        
         select   std_ID as StdNO,  
                   StudentName as StdName,  
                   Email as Email,  
                   Phone as Phone,  
                   Address as Address,  
                   IMAGEs as StdImage  
                  
         FROM StudentDetails   
          Where     
                 std_ID = @std_ID         
          
END  
  
  
-- To Insert Student Detail  
CREATE PROCEDURE [dbo].[USP_Student_Insert]                                                  
   (      
     @StudentName     VARCHAR(100),                         
     @Email           VARCHAR(100)     = '',    
     @Phone           VARCHAR(100)     = '',    
     @Address         VARCHAR(100)     = '',    
     @IMAGEs          varbinary(MAX)  
      )                                                            
AS                                                                    
BEGIN            
        IF NOT EXISTS (SELECT StudentName FROM StudentDetails WHERE StudentName=@StudentName)    
            BEGIN    
    
                 INSERT INTO StudentDetails  
           (StudentName   ,Email     ,Phone      ,Address  ,IMAGEs)  
     VALUES  
           (@StudentName    ,@Email       ,@Phone       ,@Address      ,@IMAGEs)  
                            
            Select 'Inserted' as results    
                            
            END    
         ELSE    
             BEGIN    
                     Select 'Exists' as results    
              END     
END    
  
-- To Update Student Detail  
CREATE PROCEDURE [dbo].[USP_Student_Update]                                                  
   (   @std_ID               Int=0,    
     @StudentName     VARCHAR(100),                         
     @Email           VARCHAR(100)     = '',    
     @Phone           VARCHAR(100)     = '',    
     @Address         VARCHAR(100)     = '',    
     @IMAGEs          varbinary(MAX)  
      )                                                            
AS                                                                    
BEGIN            
        
                 UPDATE  StudentDetails SET  
                           StudentName = @StudentName  ,  
                           Email        =@Email,  
                           Phone        =@Phone,  
                           Address      =@Address,  
                           IMAGEs       =@IMAGEs  
                    WHERE    
                        std_ID=@std_ID    
      
            Select 'Updated' as results    
                            
             
END    
  
  
-- to Delete  
CREATE PROCEDURE [dbo].[USP_Student_Delete]                                                  
   (  @std_ID               Int=0 )                                                            
AS                                                                    
BEGIN            
      
        DELETE FROM StudentDetails WHERE  std_ID=@std_ID    
    
         Select 'Deleted' as results    
                
END

۲. ایجاد Windows Form Application در ویژوال استودیو ۲۰۱۵

بعد از نصب ویژوال استودیو ۲۰۱۵، روی New و سپس Project کلیک کرده و Windows Forms Application را انتخاب می کنیم. نام پروژه را “DatagridViewCRUD” می گذاریم و Ok می کنیم.

CRUD

حال که پروژه winForm خود را ایجاد کردیم، فولدری به نام “Images” برای اضافه کردن عکس و فولدر دیگری به نام “Helper” برای کلاس های DataGridView Helper، SQL BIZ و DAL در Solution Explorer ایجاد می کنیم. به این ترتیب همه عکس های پروژه در فولدر Images قرار می گیرد، همچنین عکس های اصلی مانند  Edit و Delete را نیز به عنوان فایل های منبع در فولدر Resource قرار می دهیم.

CRUD

  1. ایجاد کلاس DatagridView Helper

با استفاده از C# یک کلاس DataGridView Helper ایجاد می کنیم. یک کلاس جدید به نام DGVHelper.cs به فولدر Helper اضافه می کنیم و کد زیر را درون کلاس helper کپی می کنیم.

فضای نام خود را چک کنید، اگر فضای نام شما با فضای نام کلاس مطابقت نداشت آن را به فضای نام خود تغییر دهید. به طور مثال، در اینجا نام پروژه ما DatagridViewCRUD است، بنابراین می بینید که فضای نام ما به صورت “DatagridViewCRUD” می باشد. اگر نام پروژه شما متفاوت است آن را تغییر دهید.

توجه داشته باشید که در این کلاس برای ستون عکس باید از resource file استفاده کنیم، اگر نام فایل منبع شما متفاوت است، آن را تغییر دهید.

using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;  
using System.Text;  
using System.Windows.Forms;  
using System.Windows.Forms;  
using System.ComponentModel;  
using System.Collections.Generic;  
using System.IO;  
using System.Diagnostics;  
using System.Text.RegularExpressions;  
using System.Drawing.Imaging;  
using System.Runtime.InteropServices;  
using System.Drawing.Text;  
using System.Drawing.Drawing2D;  
/// <summary>  
/// Author : Shanu  
/// Create date : 2015-12-01  
/// Description :Student Register  
/// Latest  
/// Modifier :   
/// Modify date :   
namespace DatagridViewCRUD  
{  
    public partial class Form1: Form  
    {#  
        region Attribute  
        // ReceptionSystemSrc.Helper.Webcamera.WebCam webcam;  
        Boolean keypadOn = false;  
        DataGridView Master_shanuDGV = new DataGridView();  
        Button btn = new Button();  
        Boolean Iscaptuered = false;  
        Helper.BizClass bizObj = new Helper.BizClass();  
        Helper.ShanuDGVHelper objshanudgvHelper = new Helper.ShanuDGVHelper();  
        DataSet ds = new DataSet();  
        PrivateFontCollection pfc = new PrivateFontCollection();  
        int ival = 0;#  
        endregion  
        public Form1()  
        {  
            InitializeComponent();  
        }  
        private void Form1_Load(object sender, EventArgs e)  
        {  
            try  
            {  
                MasterGrid_Initialize();  
            }  
            catch (Exception ex)  
            {}  
        }  
        public void MasterGrid_Initialize()  
        {  
            Helper.ShanuDGVHelper.Layouts(Master_shanuDGV, Color.White, Color.White, Color.White, false, Color.SteelBlue, false, false, false, Color.White, 46, 60, "small");  
            //Set Height,width and add panel to your selected control  
            Helper.ShanuDGVHelper.Generategrid(Master_shanuDGV, pnlGrid, 1000, 600, 10, 10);  
            // Color Image Column creation  
            Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.imageEditColumn, "Edit", "Edit", "Edit", true, 60, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
            // Color Image Column creation  
            Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.imageDelteColumn, "Delete", "Delete", "Delete", true, 60, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
            // Color Image Column creation  
            Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.imageBoundcolumn, "StdImage", "Image", "Image", true, 60, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
            //// BoundColumn creation  
            Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.BoundColumn, "StdNO", "StdNO", "StdNO", true, 80, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
            //// BoundColumn creation  
            Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.BoundColumn, "StdName", "StdName", "StdName", true, 180, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
            //// BoundColumn creation  
            Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.BoundColumn, "Email", "Email", "Email", true, 180, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
            //// BoundColumn creation  
            Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.BoundColumn, "Phone", "Phone", "Phone", true, 180, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
            //// BoundColumn creation  
            Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.BoundColumn, "Address", "Address", "Address", true, 180, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
            //// Color Image Column creation  
            //Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.ImageColumn, "StaffID", "", "", true, 40, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleRight, Color.Transparent, null, "", "", Color.Black);  
            //// Color Image Column creation  
            //Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.imageEditColumn, "Edit", "", "", true, 38, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleRight, Color.Transparent, null, "", "", Color.Black);  
            //// Color Image Column creation  
            //Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.imageDelteColumn, "Delete", "", "", true, 38, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleRight, Color.Transparent, null, "", "", Color.Black);  
            bindData();  
            //objshanudgvHelper.MasterDGVs_CellFormatting(Master_shanuDGV, Master_shanuDGV.Columns["IMG"].Index, ShanuEventTypes.cellContentClick, ShanuControlTypes.ImageColumn ds.Tables[0], "IMG");  
            Master_shanuDGV.CellFormatting += new DataGridViewCellFormattingEventHandler(MasterDGVs_CellFormatting);  
            Master_shanuDGV.SelectionChanged += new EventHandler(Master_shanuDGV_SelectionChanged);  
            Master_shanuDGV.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(Master_shanuDGV_CellContentClick);  
            // Master_shanuDGV.DefaultCellStyle.ForeColor = Color.FromA#333333;  
        }  
        private void Master_shanuDGV_SelectionChanged(Object sender, EventArgs e)  
        {  
            Master_shanuDGV.ClearSelection();  
        }  
        private void bindData()  
            {  
                try  
                {  
                    // Bind data to DGV.  
                    SortedDictionary < string, string > sd = new SortedDictionary < string, string > ()  
                    {};  
                    sd.Add("@StudentName", txtName.Text.Trim());  
                    ds = bizObj.SelectList("USP_Student_Select", sd);  
                    Master_shanuDGV.DataSource = null;  
                    if (ds.Tables[0].Rows.Count > 0)  
                    {  
                        Master_shanuDGV.DataSource = ds.Tables[0];  
                    }  
                }  
                catch (Exception ex)  
                {}  
            }  
            // Cell Content Click Event  
        private void Master_shanuDGV_CellContentClick(object sender, DataGridViewCellEventArgs e)  
        {  
            if (Master_shanuDGV.Columns[e.ColumnIndex].Name == "Edit")  
            {  
                try  
                {  
                    string studentID = ds.Tables[0].Rows[e.RowIndex]["StdNO"].ToString();  
                    frmSudentAdd obj = new frmSudentAdd(studentID);  
                    obj.ShowDialog();  
                    bindData();  
                }  
                catch (Exception ex)  
                {}  
            }  
            else if (Master_shanuDGV.Columns[e.ColumnIndex].Name == "Delete")  
            {  
                try  
                {  
                    string studentID = ds.Tables[0].Rows[e.RowIndex]["StdNO"].ToString();  
                    if (MessageBox.Show("Are You Sure to Delete Student Details ?", "Delete Student", MessageBoxButtons.YesNo) == DialogResult.Yes)  
                    {  
                        SortedDictionary < string, string > sd = new SortedDictionary < string, string > ()  
                        {};  
                        sd.Add("@std_ID", studentID);  
                        DataSet ds1 = new DataSet();  
                        ds1 = bizObj.SelectList("USP_Student_Delete", sd);  
                        if (ds1.Tables[0].Rows.Count > 0)  
                        {  
                            string result = ds1.Tables[0].Rows[0][0].ToString();  
                            if (result == "Deleted")  
                            {  
                                MessageBox.Show("Student Deleted Successful, Thank You!", "Successfull", MessageBoxButtons.OK, MessageBoxIcon.Information);  
                                bindData();  
                            }  
                        }  
                    }  
                }  
                catch (Exception ex)  
                {}  
            }  
        }#  
        region Image Colukmn  
        public static Image MakeCircleImage(Image img)  
        {  
            Bitmap bmp = new Bitmap(img.Width, img.Height);  
            using(GraphicsPath gpImg = new GraphicsPath())  
            {  
                gpImg.AddEllipse(0, 0, img.Width, img.Height);  
                using(Graphics grp = Graphics.FromImage(bmp))  
                {  
                    grp.Clear(Color.White);  
                    grp.SetClip(gpImg);  
                    grp.DrawImage(img, Point.Empty);  
                }  
            }  
            return bmp;  
        }  
        void MasterDGVs_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)  
        {  
            try  
            {  
                if (Master_shanuDGV.Columns[e.ColumnIndex].Name == "StdImage")  
                {  
                    if (ds.Tables[0].Rows[e.RowIndex]["StdImage"] != "" && ds.Tables[0].Rows[e.RowIndex]["StdImage"] != DBNull.Value)  
                    {  
                        byte[] bits = new byte[0];  
                        bits = (byte[]) ds.Tables[0].Rows[e.RowIndex]["StdImage"];  
                        MemoryStream ms = new MemoryStream(bits);  
                        System.Drawing.Image imgSave = System.Drawing.Image.FromStream(ms);  
                        e.Value = MakeCircleImage(imgSave);  
                    }  
                    else  
                    {  
                        System.Drawing.Image imgSave = (Image) DatagridViewCRUD.Properties.Resources.gridUserImage;  
                        e.Value = MakeCircleImage(imgSave);  
                    }  
                }  
            }  
            catch (Exception ex)  
            {}  
        }  
        public Image byteArrayToImage(byte[] byteArrayIn)  
        {  
            using(MemoryStream mStream = new MemoryStream(byteArrayIn))  
            {  
                return Image.FromStream(mStream);  
            }  
        }#  
        endregion  
        private void btnSearch_Click(object sender, EventArgs e)  
        {  
            bindData();  
        }  
        private void btnStaffAdd_Click(object sender, EventArgs e)  
        {  
            frmSudentAdd obj = new frmSudentAdd("0");  
            obj.ShowDialog();  
            bindData();  
        }  
    }  
}

۲.ایجاد کلاس های DAL و Biz

  • Business logic: در اینجا Business logic یک کلاس است. از UI(code behind ما) تمام ورودی ها را از کاربر به صورت اشیا به Business logic ارسال می کنیم.
  • Data Access Layer: همه پارامترهای اشیا در کلاس Business logic را به این کلاس Data Access Layer ارسال می کنیم. این کلاس از اشیای Net مانند Command (Select)، (نوع کوئری متن است یا Stored Prodedure)Command Type، (اجرای دستورات Insert/Update و Delete)ExecuteNonQuery، (عبارت مربوط به select را برمی گرداند)ExecuteDataset و(برای برگرداندن داده ها به صورت تکی)ExecuteScalarاستفاده می کند.

برای ایجاد کلاس DAL روی فولدر Helper راست کلیک کرده و New Class را انتخاب و نام SQLDALClass.cs را به آن می دهیم.

کد زیر را در آن قرار می دهیم. توجه داشته باشید که نام فضای نام ها به درستی نوشته شده باشد.

نکته: در این کلاس، فایل متنی برای ذخیره connection string ایجاد کردیم.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Data;  
using System.Data.SqlClient;  
using System.IO;  
using System.Windows.Forms;  
/// <summary>  
/// Author : Shanu  
/// Create date : 2015-05-09  
/// Description :MYSQL DBCONNECT Helper CLASS  
/// Latest  
/// Modifier :   
/// Modify date :   
/// </summary>  
namespace DatagridViewCRUD.Helper  
{  
    class SQLDALClass  
    {  
        public String ConnectionString = "server=.; database=StudentsDB; user id=URID; password=PWD;";  
        public SqlConnection connection;#  
        region Initiallize  
        public SQLDALClass()  
            {  
                Initialize();  
            }  
            //Initialize values  
        private void Initialize()  
        {  
            ConnectionString = ReadConnectionString();  
            connection = new SqlConnection(ConnectionString);  
        }  
        public String ReadConnectionString()  
        {  
            string path = Application.StartupPath + @ "\DBConnection.txt";  
            String connectionString = "";  
            if (!File.Exists(path))  
            {  
                using(StreamWriter tw = File.CreateText(path))  
                {  
                    tw.WriteLine("server=.; database=StudentsDB; user id=URID; password=PWD;");  
                    tw.Close();  
                    ConnectionString = "server=.; database=StudentsDB; user id=URID; password=PWD;";  
                }  
            }  
            else  
            {  
                TextReader tr = new StreamReader(path);  
                connectionString = tr.ReadLine();  
                tr.Close();  
            }  
            return connectionString;  
        }#  
        endregion# region DB ConnectionOpen  
        public bool OpenConnection()  
        {  
            try  
            {  
                connection.Open();  
                return true;  
            }  
            catch (SqlException ex)  
            {  
                writeLogMessage(ex.Message.ToString());  
            }  
            return false;  
        }#  
        endregion# region DB Connection Close  
        //Close connection  
        public bool CloseConnection()  
        {  
            try  
            {  
                connection.Close();  
                return true;  
            }  
            catch (SqlException ex)  
            {  
                writeLogMessage(ex.Message.ToString());  
                return false;  
            }  
        }#  
        endregion# region ExecuteNonQuery  
        for insert / Update and Delete  
            // For Student  
            // Insert  
        public DataSet SP_Student_ImageInsert(String SP_NAME, string StudentName, string Email, string Phone, string Address, byte[] IMAGEs)  
            {  
                DataSet ds = new DataSet();  
                //open connection  
                if (OpenConnection() == true)  
                {  
                    //create command and assign the query and connection from the constructor  
                    SqlCommand cmd = new SqlCommand(SP_NAME, connection);  
                    cmd.CommandType = CommandType.StoredProcedure;  
                    cmd.Parameters.Add("@StudentName", SqlDbType.VarChar);  
                    cmd.Parameters.Add("@Email", SqlDbType.VarChar);  
                    cmd.Parameters.Add("@Phone", SqlDbType.VarChar);  
                    cmd.Parameters.Add("@Address", SqlDbType.VarChar);  
                    cmd.Parameters.Add("@IMAGEs", SqlDbType.VarBinary);  
                    cmd.Parameters["@StudentName"].Value = StudentName;  
                    cmd.Parameters["@Email"].Value = Email;  
                    cmd.Parameters["@Phone"].Value = Phone;  
                    cmd.Parameters["@Address"].Value = Address;  
                    if (IMAGEs == null)  
                    {  
                        cmd.Parameters["@IMAGEs"].Value = DBNull.Value;  
                    }  
                    else  
                    {  
                        cmd.Parameters["@IMAGEs"].Value = IMAGEs;  
                    }  
                    //Execute command  
                    SqlDataAdapter da = new SqlDataAdapter(cmd);  
                    da.Fill(ds);  
                    //close connection  
                    CloseConnection();  
                }  
                return ds;  
            }  
            // Update  
        public DataSet SP_Student_ImageEdit(String SP_NAME, int std_ID, string StudentName, string Email, string Phone, string Address, byte[] IMAGEs)  
        {  
            DataSet ds = new DataSet();  
            //open connection  
            if (OpenConnection() == true)  
            {  
                //create command and assign the query and connection from the constructor  
                SqlCommand cmd = new SqlCommand(SP_NAME, connection);  
                cmd.CommandType = CommandType.StoredProcedure;  
                cmd.Parameters.Add("@std_ID", SqlDbType.Int);  
                cmd.Parameters.Add("@StudentName", SqlDbType.VarChar);  
                cmd.Parameters.Add("@Email", SqlDbType.VarChar);  
                cmd.Parameters.Add("@Phone", SqlDbType.VarChar);  
                cmd.Parameters.Add("@Address", SqlDbType.VarChar);  
                cmd.Parameters.Add("@IMAGEs", SqlDbType.VarBinary);  
                cmd.Parameters["@std_ID"].Value = std_ID;  
                cmd.Parameters["@StudentName"].Value = StudentName;  
                cmd.Parameters["@Email"].Value = Email;  
                cmd.Parameters["@Phone"].Value = Phone;  
                cmd.Parameters["@Address"].Value = Address;  
                if (IMAGEs == null)  
                {  
                    cmd.Parameters["@IMAGEs"].Value = DBNull.Value;  
                }  
                else  
                {  
                    cmd.Parameters["@IMAGEs"].Value = IMAGEs;  
                }  
                //Execute command  
                SqlDataAdapter da = new SqlDataAdapter(cmd);  
                da.Fill(ds);  
                //close connection  
                CloseConnection();  
            }  
            return ds;  
        }#  
        endregion# region Write Log Message to textFile  
        public void writeLogMessage(String logMessage)  
        {  
            string path = Application.StartupPath + @ "\LogFile.txt";  
            if (!File.Exists(path))  
            {  
                using(StreamWriter tw = File.CreateText(path))  
                {  
                    tw.WriteLine(logMessage);  
                    tw.Close();  
                }  
            }  
            else  
            {  
                StreamWriter tr = new StreamWriter(path);  
                tr.WriteLine(logMessage);  
                tr.Close();  
            }  
        }#  
        endregion# region DataTable  
        for select result and  
        return as DataTable  
            //for select result and return as DataTable  
        public DataSet SP_Dataset_return(String ProcName, params SqlParameter[] commandParameters)  
        {  
            DataSet ds = new DataSet();  
            //open connection  
            if (OpenConnection() == true)  
            {  
                //for Select Query   
                SqlCommand cmdSel = new SqlCommand(ProcName, connection);  
                cmdSel.CommandType = CommandType.StoredProcedure;  
                // Assign the provided values to these parameters based on parameter order  
                AssignParameterValues(commandParameters, commandParameters);  
                AttachParameters(cmdSel, commandParameters);  
                SqlDataAdapter da = new SqlDataAdapter(cmdSel);  
                da.Fill(ds);  
                //close connection  
                CloseConnection();  
            }  
            return ds;  
        }  
        private static void AttachParameters(SqlCommand command, SqlParameter[] commandParameters)  
        {  
            if (command == null) throw new ArgumentNullException("command");  
            if (commandParameters != null)  
            {  
                foreach(SqlParameter p in commandParameters)  
                {  
                    if (p != null)  
                    {  
                        // Check for derived output value with no value assigned  
                        if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input) && (p.Value == null))  
                        {  
                            p.Value = DBNull.Value;  
                        }  
                        command.Parameters.Add(p);  
                    }  
                }  
            }  
        }  
        private static void AssignParameterValues(SqlParameter[] commandParameters, object[] parameterValues)  
        {  
            if ((commandParameters == null) || (parameterValues == null))  
            {  
                // Do nothing if we get no data  
                return;  
            }  
            // We must have the same number of values as we pave parameters to put them in  
            if (commandParameters.Length != parameterValues.Length)  
            {  
                throw new ArgumentException("Parameter count does not match Parameter Value count.");  
            }  
            // Iterate through the SqlParameters, assigning the values from the corresponding position in the   
            // value array  
            for (int i = 0, j = commandParameters.Length; i < j; i++)  
            {  
                // If the current array value derives from IDbDataParameter, then assign its Value property  
                if (parameterValues[i] is IDbDataParameter)  
                {  
                    IDbDataParameter paramInstance = (IDbDataParameter) parameterValues[i];  
                    if (paramInstance.Value == null)  
                    {  
                        commandParameters[i].Value = DBNull.Value;  
                    }  
                    else  
                    {  
                        commandParameters[i].Value = paramInstance.Value;  
                    }  
                }  
                else if (parameterValues[i] == null)  
                {  
                    commandParameters[i].Value = DBNull.Value;  
                }  
                else  
                {  
                    commandParameters[i].Value = parameterValues[i];  
                }  
            }  
        }#  
        endregion  
    }  
}

۳. ایجاد کلاس Biz

به همین ترتیب، کلاس Biz را ایجاد کرده و متدی برای ارسال اشیای پارامترها اضافه می کنیم. کد کامل این کلاس به شکل زیر است:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Data;  
using System.Data.SqlClient;  
using System.IO;  
using System.Windows.Forms;  
/// <summary>  
/// Author : Shanu  
/// Create date : 2015-12-01  
/// Description : Biz Class  
/// Latest  
/// Modifier :   
/// Modify date :   
/// </summary>  
namespace DatagridViewCRUD.Helper  
{  
    class BizClass  
    {  
        DatagridViewCRUD.Helper.SQLDALClass objDAL = new DatagridViewCRUD.Helper.SQLDALClass();  
        //All Business Method here  
        #  
        region ALL Business method here  
        public DataSet SelectList(String SP_NAME, SortedDictionary < string, string > sd)  
            {  
                try  
                {  
                    return objDAL.SP_Dataset_return(SP_NAME, GetSdParameter(sd));  
                }  
                catch (Exception ex)  
                {  
                    throw ex;  
                }  
            }  
            // Insert  
        public DataSet SP_student_ImageInsert(String SP_NAME, string StudentName, string Email, string Phone, string Address, byte[] IMAGEs)  
            {  
                try  
                {  
                    return objDAL.SP_Student_ImageInsert(SP_NAME, StudentName, Email, Phone, Address, IMAGEs);  
                }  
                catch (Exception ex)  
                {  
                    throw ex;  
                }  
            }  
            // EDIT  
        public DataSet SP_student_ImageEdit(String SP_NAME, int std_ID, string StudentName, string Email, string Phone, string Address, byte[] IMAGEs)  
        {  
            try  
            {  
                return objDAL.SP_Student_ImageEdit(SP_NAME, std_ID, StudentName, Email, Phone, Address, IMAGEs);  
            }  
            catch (Exception ex)  
            {  
                throw ex;  
            }  
        }#  
        endregion# region Methods Parameter  
        /// <summary>  
        /// This method Sorted-Dictionary key values to an array of SqlParameters  
        /// </summary>  
        public static SqlParameter[] GetSdParameter(SortedDictionary < string, string > sortedDictionary)  
        {  
            SqlParameter[] paramArray = new SqlParameter[]  
            {};  
            foreach(string key in sortedDictionary.Keys)  
            {  
                AddParameter(ref paramArray, new SqlParameter(key, sortedDictionary[key]));  
            }  
            return paramArray;  
        }  
        public static void AddParameter(ref SqlParameter[] paramArray, string parameterName, object parameterValue)  
        {  
            SqlParameter parameter = new SqlParameter(parameterName, parameterValue);  
            AddParameter(ref paramArray, parameter);  
        }  
        public static void AddParameter(ref SqlParameter[] paramArray, string parameterName, object parameterValue, object parameterNull)  
        {  
            SqlParameter parameter = new SqlParameter();  
            parameter.ParameterName = parameterName;  
            if (parameterValue.ToString() == parameterNull.ToString()) parameter.Value = DBNull.Value;  
            else parameter.Value = parameterValue;  
            AddParameter(ref paramArray, parameter);  
        }  
        public static void AddParameter(ref SqlParameter[] paramArray, string parameterName, SqlDbType dbType, object parameterValue)  
        {  
            SqlParameter parameter = new SqlParameter(parameterName, dbType);  
            parameter.Value = parameterValue;  
            AddParameter(ref paramArray, parameter);  
        }  
        public static void AddParameter(ref SqlParameter[] paramArray, string parameterName, SqlDbType dbType, ParameterDirection direction, object parameterValue)  
        {  
            SqlParameter parameter = new SqlParameter(parameterName, dbType);  
            parameter.Value = parameterValue;  
            parameter.Direction = direction;  
            AddParameter(ref paramArray, parameter);  
        }  
        public static void AddParameter(ref SqlParameter[] paramArray, params SqlParameter[] newParameters)  
        {  
            SqlParameter[] newArray = Array.CreateInstance(typeof (SqlParameter), paramArray.Length + newParameters.Length) as SqlParameter[];  
            paramArray.CopyTo(newArray, 0);  
            newParameters.CopyTo(newArray, paramArray.Length);  
            paramArray = newArray;  
        }#  
        endregion  
    }  
}  
۳. Design Your Form * Design Your Form  
Design your form with search fields and add a panel named as pnlGrid.  
We will be adding the dynamic DataGridView to this panel.  
In form load we will design the DataGridView using our Helper class and add the DataGridView to the Panel.  
private void Form1_Load(object sender, EventArgs e)  
{  
    try  
    {  
        MasterGrid_Initialize();  
    }  
    catch (Exception ex)  
    {}  
}  
public void MasterGrid_Initialize()  
{  
    Helper.ShanuDGVHelper.Layouts(Master_shanuDGV, Color.White, Color.White, Color.White, false, Color.SteelBlue, false, false, false, Color.White, 46, 60, "small");  
    //Set Height,width and add panel to your selected control  
    Helper.ShanuDGVHelper.Generategrid(Master_shanuDGV, pnlGrid, 1000, 600, 10, 10);  
    // Color Image Column creation  
    Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.imageEditColumn, "Edit", "Edit", "Edit", true, 60, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
    // Color Image Column creation  
    Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.imageDelteColumn, "Delete", "Delete", "Delete", true, 60, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
    // Color Image Column creation  
    Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.imageBoundcolumn, "StdImage", "Image", "Image", true, 60, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
    //// BoundColumn creation  
    Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.BoundColumn, "StdNO", "StdNO", "StdNO", true, 80, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
    //// BoundColumn creation  
    Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.BoundColumn, "StdName", "StdName", "StdName", true, 180, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
    //// BoundColumn creation  
    Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.BoundColumn, "Email", "Email", "Email", true, 180, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
    //// BoundColumn creation  
    Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.BoundColumn, "Phone", "Phone", "Phone", true, 180, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
    //// BoundColumn creation  
    Helper.ShanuDGVHelper.Templatecolumn(Master_shanuDGV, ShanuControlTypes.BoundColumn, "Address", "Address", "Address", true, 180, DataGridViewTriState.True, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.MiddleCenter, Color.Transparent, null, "", "", Color.Black);  
    bindData();  
    Master_shanuDGV.CellFormatting += new DataGridViewCellFormattingEventHandler(MasterDGVs_CellFormatting);  
    Master_shanuDGV.SelectionChanged += new EventHandler(Master_shanuDGV_SelectionChanged);  
    Master_shanuDGV.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(Master_shanuDGV_CellContentClick);  
}

برای نمایش عکس ها به صورت دایره از رویداد DatagridView CellFormatting استفاده می کنیم و برای Edit/Delete از رویداد CellContentClick استفاده خواهیم کرد.

۴. نمایش عکس های دایره ای در Grid

در رویداد CellFormatting ستون عکس را بررسی می کنیم. عکس هر دانشجو را برای نمایش به شکل دایره در GridView به متد MakeCircleImage ارسال می کنیم.

#region Image Colukmn  
public static Image MakeCircleImage(Image img)  
{  
    Bitmap bmp = new Bitmap(img.Width, img.Height);  
    using(GraphicsPath gpImg = new GraphicsPath())  
    {  
        gpImg.AddEllipse(0, 0, img.Width, img.Height);  
        using(Graphics grp = Graphics.FromImage(bmp))  
        {  
            grp.Clear(Color.White);  
            grp.SetClip(gpImg);  
            grp.DrawImage(img, Point.Empty);  
        }  
    }  
    return bmp;  
}  
void MasterDGVs_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)  
{  
    try  
    {  
        if (Master_shanuDGV.Columns[e.ColumnIndex].Name == "StdImage")  
        {  
            if (ds.Tables[0].Rows[e.RowIndex]["StdImage"] != "" && ds.Tables[0].Rows[e.RowIndex]["StdImage"] != DBNull.Value)  
            {  
                byte[] bits = new byte[0];  
                bits = (byte[]) ds.Tables[0].Rows[e.RowIndex]["StdImage"];  
                MemoryStream ms = new MemoryStream(bits);  
                System.Drawing.Image imgSave = System.Drawing.Image.FromStream(ms);  
                e.Value = MakeCircleImage(imgSave);  
            }  
            else  
            {  
                System.Drawing.Image imgSave = (Image) DatagridViewCRUD.Properties.Resources.gridUserImage;  
                e.Value = MakeCircleImage(imgSave);  
            }  
        }  
    }  
    catch (Exception ex)  
    {}  
}

۵. جستجوی اطلاعات دانشجو

در رویداد کلیک دکمه جستجو، متد bindData را فراخوانی می کنیم تا نتیجه را bind کند. نام دانشجو را به عنوان پارامتر به همراه نام SP به کلاس Business Logic ارسال کرده و از کلاس Biz نتایج را به صورت Dataset دریافت کرده و آن را به DataGridView متصل می کنیم.

private void btnSearch_Click(object sender, EventArgs e)  
{  
    bindData();  
}  
private void bindData()  
{  
    try  
    {  
        // Bind data to DGV.  
        SortedDictionary < string, string > sd = new SortedDictionary < string, string > ()  
        {};  
        sd.Add("@StudentName", txtName.Text.Trim());  
        ds = bizObj.SelectList("USP_Student_Select", sd);  
        Master_shanuDGV.DataSource = null;  
        if (ds.Tables[0].Rows.Count > 0)  
        {  
            Master_shanuDGV.DataSource = ds.Tables[0];  
        }  
    }  
    catch (Exception ex)  
    {}  
}

۶. Insert/Edit اطلاعات دانشجو

فرم دیگری برای insert و update ایجاد می کنیم و برای هر دو عمل Add/Edit اطلاعات دانشجویان از یک فرم استفاده می کنیم. فرم موردنظر را به شکل زیر ایجاد می کنیم:

CRUD

برای عمل Add از فرم اصلی پارامتر ۰ را ارسال کرده و برای Edit، ID دانشجو را ارسال می کنیم.

همان طور که در زیر مشاهده می کنید، در رویداد کلیک دکمه Add پارامتر ۰ را برای فرم Add ارسال می کنیم.

private void btnStaffAdd_Click(object sender, EventArgs e)  
{  
   frmSudentAdd obj = new frmSudentAdd("0");  
   obj.ShowDialog();  
   bindData();  
}

در سازنده فرم frmStudentAdd، ID دانشجویان که از فرم اصلی ارسال شده اند، دریافت شده و در متغیر محلی ذخیره می شوند.

public frmSudentAdd(string StudentID)  
{  
   InitializeComponent();  
   StudentIDS = StudentID;  
}

در Form Load بررسی می کنیم که اگر StudentIDS برابر ۰ باشد یعنی مربوط به Add می باشد و اگر بزرگتر از ۰ بود یعنی مربوط به Edit اطلاعات دانشجو است.

private void frmSudentAdd_Load(object sender, EventArgs e)  
{  
    try  
    {  
        isImageCaptuerd = false;  
        // setFont();  
        if (StudentIDS != "0")  
        {  
            displayVisitorDetails();  
        }  
    }  
    catch (Exception ex)  
    {}  
}

اگر Student ID برای ویرایش ارسال شده باشد، سپس Student ID برای دریافت اطلاعات دانشجو و نمایش آن ها برای ویرایش، به عنوان پارامتر ارسال می شود.

private void displayVisitorDetails()  
{  
    // lblUserType.Text = VisitorTypes;  
    try  
    {  
        SortedDictionary < string, string > sd = new SortedDictionary < string, string > ()  
        {};  
        //sd.Add("@searchType", VisitorTypes);  
        sd.Add("@std_ID", StudentIDS);  
        DataSet ds = new DataSet();  
        ds = bizObj.SelectList("USP_StudentID_Select", sd);  
        if (ds.Tables[0].Rows.Count > 0)  
        {  
            txtStudentID.Text = ds.Tables[0].Rows[0]["StdNO"].ToString();  
            txtstdName.Text = ds.Tables[0].Rows[0]["StdName"].ToString();  
            txtEmail.Text = ds.Tables[0].Rows[0]["Email"].ToString();  
            txtphone.Text = ds.Tables[0].Rows[0]["Phone"].ToString();  
            txtAddress.Text = ds.Tables[0].Rows[0]["Address"].ToString();  
            if (ds.Tables[0].Rows[0]["StdImage"].ToString() != "")  
            {  
                byte[] bits = new byte[0];  
                bits = (byte[]) ds.Tables[0].Rows[0]["StdImage"];  
                MemoryStream ms = new MemoryStream(bits);  
                this.picImage.Image = System.Drawing.Bitmap.FromStream(ms);  
                ms = null;  
            }  
        }  
    }  
    catch (Exception ex)  
    {}  
}

آپلود عکس: در رویداد کلیک دکمه آپلود، فایل عکس را با استفاده از OpenFileDialog انتخاب کرده و عکس انتخاب شده را به PictureBox اضافه می کنیم.

private void btnCaptuer_Click(object sender, EventArgs e)  
{  
    try  
    {  
        isImageCaptuerd = false;  
        OpenFileDialog ofd = new OpenFileDialog();  
        ofd.Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif";  
        ofd.Title = "Please Upload Image";  
        if (ofd.ShowDialog() == DialogResult.OK)  
        {  
            isImageCaptuerd = true;  
            picImage.Image = Image.FromFile(ofd.FileName);  
        }  
    }  
    catch (Exception ex)  
    {}  
}

CRUD

رویداد کلیک دکمه ذخیره

در رویداد کلیک دکمه ذخیره، ابتدا بررسی می کنیم که آیا این یک دانشجوی جدید است یا ویرایش کاربری است که از قبل وجود داشته است. برای کاربر جدید مانند زیر عمل می کنیم:

private void btnSave_Click(object sender, EventArgs e)  
{  
    if (StudentIDS != "0")  
    {  
        EditStaffDetails();  
    }  
    else  
    {  
        AddNewStaffDetails();  
    }  
}

اضافه کردن دانشجوی جدید:

همه پارامترها بعلاوه تصویر به صورت Byte Object برای کلاس Biz ارسال می کنیم. بعد از insert پیغامی برای کاربر نمایش می دهیم که این کار با موفقیت انجام شد:

private void AddNewStaffDetails()  
{  
    try  
    {  
        byte[] ImageData = null;  
        string result = "";  
        if (isImageCaptuerd == true)  
        {  
            try  
            {  
                if (picImage.Image != null)  
                {  
                    ImageData = imgToByteArray(picImage.Image);  
                }  
            }  
            catch (Exception ex)  
            {}  
        }  
        SortedDictionary < string, string > sd = new SortedDictionary < string, string > ()  
        {};  
        DataSet ds = new DataSet();  
        ds = bizObj.SP_student_ImageInsert("USP_Student_Insert", txtstdName.Text.Trim(), txtEmail.Text.Trim(), txtphone.Text.Trim(), txtAddress.Text.Trim(), ImageData);  
        if (ds.Tables[0].Rows.Count > 0)  
        {  
            result = ds.Tables[0].Rows[0][0].ToString();  
            if (result == "Inserted")  
            {  
                MessageBox.Show("Student Added Successful, Thank You!", "Successfull", MessageBoxButtons.OK, MessageBoxIcon.Information);  
                this.Close();  
            }  
            else  
            {  
                MessageBox.Show(result, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);  
            }  
        }  
    }  
    catch (Exception ex)  
    {}  
}

ویرایش اطلاعات دانشجو:

در Main form اصلی Id دانشجوی انتخاب شده را دریافت کرده و آن را به فرم frmStudentAdd ارسال می کنیم تا اطلاعات دانشجو را ویرایش کنیم.

private void Master_shanuDGV_CellContentClick(object sender, DataGridViewCellEventArgs e)  
  
if (Master_shanuDGV.Columns[e.ColumnIndex].Name == "Edit")  
{  
    try  
    {  
        string studentID = ds.Tables[0].Rows[e.RowIndex]["StdNO"].ToString();  
        frmSudentAdd obj = new frmSudentAdd(studentID);  
        obj.ShowDialog();  
        bindData();  
    }  
    catch (Exception ex)  
    {  
    }  
  
}

به این ترتیب می توانیم اطلاعات دانشجو را ویرایش کرده و همچنین هر عکس جدیدی را برای پروفایل دانشجو به روزرسانی نماییم. همه پارامترها به همراه عکس پروفایل به صورت Byte Object برای کلاس biz ارسال می کنیم. سپس پیامی برای کاربر نمایش می دهیم که ویرایش با موفقیت انجام شد.

private void EditStaffDetails()  
{  
    try  
    {  
        byte[] ImageData = null;  
        string result = "";  
      
  
        if(picImage.Image!=null)  
        {  
            try  
            {  
            ImageData = imgToByteArray(picImage.Image);  
            }  
            catch (Exception ex)  
            {  
            }  
        }  
  
        SortedDictionary<string, string> sd = new SortedDictionary<string, string>() { };  
  
        DataSet ds = new DataSet();  
        int StudentID = Convert.ToInt32(StudentIDS);  
  
        ds = bizObj.SP_student_ImageEdit("USP_Student_Update", StudentID,txtstdName.Text.Trim(),  
                                                             txtEmail.Text.Trim(),  
                                                             txtphone.Text.Trim(),  
                                                             txtAddress.Text.Trim(),  
                                                             ImageData);  
  
        if (ds.Tables[0].Rows.Count > 0)  
        {  
            result = ds.Tables[0].Rows[0][0].ToString();  
  
            if (result == "Updated")  
            {  
                MessageBox.Show("Student Updated Successful, Thank You!", "Successfull", MessageBoxButtons.OK, MessageBoxIcon.Information);  
                this.Close();  
            }  
            else  
            {  
                MessageBox.Show(result, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);  
            }  
        }  
  
    }  
    catch (Exception ex)  
    {  
    }  
  
}  
  
// Picbox to Byte Convert  
public byte[] imgToByteArray(Image img)  
{  
    using (MemoryStream mStream = new MemoryStream())  
    {  
        img.Save(mStream, img.RawFormat);  
        return mStream.ToArray();  
    }  
}

۷.حذف اطلاعات دانشجو

در رویداد کلیک DataGridView بررسی می کنیم که ستون کلیک شده برابر با حذف باشد. سپس اگر برابر با عمل حذف بود، پیامی برای تایید حذف به کاربر نمایش می دهیم. با تایید کاربر، اطلاعات آن دانشجو حذف می شود.

private void Master_shanuDGV_CellContentClick(object sender, DataGridViewCellEventArgs e)  
{  
    if (Master_shanuDGV.Columns[e.ColumnIndex].Name == "Edit")  
    {  
        try  
        {  
            string studentID = ds.Tables[0].Rows[e.RowIndex]["StdNO"].ToString();  
            frmSudentAdd obj = new frmSudentAdd(studentID);  
            obj.ShowDialog();  
            bindData();  
        }  
        catch (Exception ex)  
        {}  
    }  
    else if (Master_shanuDGV.Columns[e.ColumnIndex].Name == "Delete")  
    {  
        try  
        {  
            string studentID = ds.Tables[0].Rows[e.RowIndex]["StdNO"].ToString();  
            if (MessageBox.Show("Are You Sure to Delete Student Details ?", "Delete Student", MessageBoxButtons.YesNo) == DialogResult.Yes)  
            {  
                SortedDictionary < string, string > sd = new SortedDictionary < string, string > ()  
                {};  
                sd.Add("@std_ID", studentID);  
                DataSet ds1 = new DataSet();  
                ds1 = bizObj.SelectList("USP_Student_Delete", sd);  
                if (ds1.Tables[0].Rows.Count > 0)  
                {  
                    string result = ds1.Tables[0].Rows[0][0].ToString();  
                    if (result == "Deleted")  
                    {  
                        MessageBox.Show("Student Deleted Successful, Thank You!", "Successfull", MessageBoxButtons.OK, MessageBoxIcon.Information);  
                        bindData();  
                    }  
                }  
            }  
        }  
        catch (Exception ex)  
        {}  
    }  
}

 

 

  • پسورد: www.mspsoft.com
فاطمه زکایی

فاطمه زکایی هستم. فارغ التحصیل کارشناسی مهندسی نرم افزار، مدت سه سال هست که در زمینه توسعه اپلیکیشن های تحت وب و اندروید و همچنین تولید محتوای تخصصی برنامه نویسی تحت وب و اندروید در مجموعه mspsoft در خدمت شما هستم.

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.