عملیات Crud با DropDownList در GridView
دوشنبه 25 آبان 1394در این مقاله نحوه استفاده از کنترل Dropdownlist در GridView را بررسی خواهیم نمود. همچنین انجام عملیات ویرایش و حذف برای هر فیلد GridView را خواهید آموخت.
ابتدا یک بانک اطلاعاتی با جدولی مانند زیر می سازیم :

USE [master]
GO
/****** Object: Database [GridViewDB] Script Date: 11/11/2015 17:28:39 ******/
CREATE DATABASE [GridViewDB] ON PRIMARY
( NAME = N'GridViewDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\GridViewDB.mdf' , SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'GridViewDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\GridViewDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
ALTER DATABASE [GridViewDB] SET COMPATIBILITY_LEVEL = 100
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [GridViewDB].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [GridViewDB] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [GridViewDB] SET ANSI_NULLS OFF
GO
ALTER DATABASE [GridViewDB] SET ANSI_PADDING OFF
GO
ALTER DATABASE [GridViewDB] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [GridViewDB] SET ARITHABORT OFF
GO
ALTER DATABASE [GridViewDB] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [GridViewDB] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [GridViewDB] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [GridViewDB] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [GridViewDB] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [GridViewDB] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [GridViewDB] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [GridViewDB] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [GridViewDB] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [GridViewDB] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [GridViewDB] SET DISABLE_BROKER
GO
ALTER DATABASE [GridViewDB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [GridViewDB] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [GridViewDB] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [GridViewDB] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [GridViewDB] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [GridViewDB] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [GridViewDB] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [GridViewDB] SET READ_WRITE
GO
ALTER DATABASE [GridViewDB] SET RECOVERY FULL
GO
ALTER DATABASE [GridViewDB] SET MULTI_USER
GO
ALTER DATABASE [GridViewDB] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [GridViewDB] SET DB_CHAINING OFF
GO
EXEC sys.sp_db_vardecimal_storage_format N'GridViewDB', N'ON'
GO
USE [GridViewDB]
GO
/****** Object: Table [dbo].[tbl_Data] Script Date: 11/11/2015 17:28:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tbl_Data](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](50) NULL,
[email] [varchar](50) NULL,
[gender] [nvarchar](50) NULL,
CONSTRAINT [PK_tbl_Data] PRIMARY KEY CLUSTERED
(
[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
SET ANSI_PADDING OFF
GO
SET IDENTITY_INSERT [dbo].[tbl_Data] ON
INSERT [dbo].[tbl_Data] ([id], [name], [email], [gender]) VALUES (8, N'بردیا', N'sbaardia_ojaghi@yo.com', N'مرد')
INSERT [dbo].[tbl_Data] ([id], [name], [email], [gender]) VALUES (9, N'علی', N'ali_tamimi@ya.com', N'مرد')
INSERT [dbo].[tbl_Data] ([id], [name], [email], [gender]) VALUES (10, N'رضا', N'za@ya.com', N'مرد')
INSERT [dbo].[tbl_Data] ([id], [name], [email], [gender]) VALUES (11, N'سمیه', N'so@y.com', N'زن')
SET IDENTITY_INSERT [dbo].[tbl_Data] OFF
سپس ویژوال استادیو را باز کرده و یک وبسایت از نوع WebForm ایجاد می کنیم.
رشته اتصال را مانند زیر در WebConfig تنظیم می نماییم :
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=.;initial catalog=GridViewDB;User id=sa;password=123;"
providerName="System.Data.SqlClient" />
</connectionStrings>
حال یک webForm با نام Default به وبسایت اضافه نموده و کدهای زیر را برای آن می نویسیم :
Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
SqlConnection con = new SqlConnection(@"Data Source=.;initial catalog=GridViewDB;User id=sa;password=123;");
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
refreshdata();
}
}
public void refreshdata()
{
SqlCommand cmd = new SqlCommand("select * from tbl_Data", con);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sda.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
refreshdata();
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int id = Convert.ToInt16(GridView1.DataKeys[e.RowIndex].Values["id"].ToString());
SqlCommand cmd = new SqlCommand("delete from tbl_Data where id = @id", con);
cmd.Parameters.AddWithValue("@id", id);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
refreshdata();
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
refreshdata();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int id = Convert.ToInt16(GridView1.DataKeys[e.RowIndex].Values["id"].ToString());
TextBox txtname = GridView1.Rows[e.RowIndex].FindControl("TextBox2") as TextBox;
TextBox txtemail = GridView1.Rows[e.RowIndex].FindControl("TextBox3") as TextBox;
DropDownList drpgender = GridView1.Rows[e.RowIndex].FindControl("DropDownList2") as DropDownList;
SqlCommand cmd = new SqlCommand("update tbl_data set name=@name, email=@email,gender=@gender where id =@id", con);
cmd.Parameters.AddWithValue("@name", txtname.Text);
cmd.Parameters.AddWithValue("@email", txtemail.Text);
cmd.Parameters.AddWithValue("@gender", drpgender.SelectedItem.Text);
cmd.Parameters.AddWithValue("@id", id);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
refreshdata();
}
}
همچنین صفحه Default.aspx به صورت زیر خواهد بود :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
.style1 {
text-decoration: underline;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<span class="style1"><strong>DropDownList گریدویو به همراه <br />
</strong></span>
<br />
<asp:GridView ID="GridView1" runat="server"
AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" DataKeyNames="id"
OnRowCancelingEdit="GridView1_RowCancelingEdit"
OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing"
OnRowUpdating="GridView1_RowUpdating" BackColor="White"
BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" CellPadding="3" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="نام">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ایمیل">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("email") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("email") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="جنسیت">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server"
SelectedValue='<%# Bind("gender") %>'>
<asp:ListItem>جنسیت را انتخاب نمایید</asp:ListItem>
<asp:ListItem>مرد</asp:ListItem>
<asp:ListItem>زن</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("gender") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#C6C3C6" ForeColor="Black" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#E7E7FF" />
<PagerStyle BackColor="#C6C3C6" ForeColor="Black" HorizontalAlign="Right" />
<RowStyle BackColor="#DEDFDE" ForeColor="Black" />
<SelectedRowStyle BackColor="#9471DE" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#594B9C" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#33276A" />
</asp:GridView>
</div>
<footer>
<a href="http://www.barnamenevisan.org">مرجع تخصصی برنامه نویسان</a>
</footer>
</form>
</body>
</html>
صفحه مانند زیر خواهد شد :

همچنین برای رفتن به کد رویدادها می توان روی آنها دوبار کلیک نمایید :
Row Cancelling Edit
Row Deleting
Row Editing
Row Updating

حال خروجی مانند زیر خواهد بود :

با کلیک بر روی گزینه Edit می توانید فیلد انتخابی را ویرایش نمایید :

می بینید که قسمت مربوط به جنسیت نیز از نوع DropDwonList می باشد :
<asp:TemplateField HeaderText="جنسیت">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server"
SelectedValue='<%# Bind("gender") %>'>
<asp:ListItem>جنسیت را انتخاب نمایید</asp:ListItem>
<asp:ListItem>مرد</asp:ListItem>
<asp:ListItem>زن</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("gender") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
در انتها برای اعمال تغییرات روی Update کلیک می نمایید.

- ASP.net
- 2k بازدید
- 6 تشکر