PDA

View Full Version : صفحه بندی گریدویو



barzin144
چهارشنبه 30 اسفند 1391, 23:27 عصر
سلام من اینجا سرچ کردم،تو یه مقاله نوشته شده بود که اگه از paging خود گرید ویو استفاده کنیم این صفحه بندی مجازی است؛ اگر با data source هم وصل باشه بازم مجازی است؟
حالا میخوام طوری صفحه بندی کنم که به data source وصل باشه،بعد با Query string کار کنه صفحه عوض میشه /Pages/2 مثلا اضافه شه به صفحه
ممنون اگه کمکم کنید.

saeed31641
پنج شنبه 01 فروردین 1392, 09:35 صبح
منظورتون خوب متوجه نشدم فقط این نگته بگم شما با هر چیزی که بخوای وصل بشی و اطلاعات رو در گرید نشون بدی بازم کویری می نویسی .حالا یا میای خودت دستی مینویسی یا میای با خود گرید تعریف میکنی
هیچ فرقی نمیکنه .
حالا اگه با صفحه بندی گرید ویو حال نمیکنی باید خودت دستی بنویسی .
در غیر اینصورت بیشتر توضیح بدین تا ما هم استفاده کنیم

p.parsaee
پنج شنبه 01 فروردین 1392, 10:30 صبح
سلام. بله صفحه بندی پیش فرض GridView مجازی هست بدین صورت که تمام اطلاعات به یک باره از جدول بانک اطلاعاتی خوانده می شوند و بعد صفحه بندی میشن. بهتره که فقط تعداد رکوردهای مورد نیاز از جدول بانک اطلاعاتی خونده بشن. مثلا اگه اندازه صفحه 10 رکورد باشه و صفحه 1 باشیم، 10 رکورد اول باید خونده بشن، اگه صفحه 2 باشیم 10 رکورد دوم باید خونده بشن، و همین طوری الی آخر. برای این کار صفحه بندی پیش فرض گریدویو کنار گذاشته میشه و باید از صفحه بندی سفارشی شده استفاده کنیم.

لینک زیر می تونه مفید باشه:
http://www.dotnettips.info/post/946/%D9%88%D8%A7%DA%A9%D8%B4%DB%8C-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-chunk-chunk-%D8%AA%DA%A9%D9%87-%D8%AA%DA%A9%D9%87-%D9%88-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%AF%D8%B1-listview

barzin144
پنج شنبه 01 فروردین 1392, 13:08 عصر
سلام. بله صفحه بندی پیش فرض GridView مجازی هست بدین صورت که تمام اطلاعات به یک باره از جدول بانک اطلاعاتی خوانده می شوند و بعد صفحه بندی میشن. بهتره که فقط تعداد رکوردهای مورد نیاز از جدول بانک اطلاعاتی خونده بشن. مثلا اگه اندازه صفحه 10 رکورد باشه و صفحه 1 باشیم، 10 رکورد اول باید خونده بشن، اگه صفحه 2 باشیم 10 رکورد دوم باید خونده بشن، و همین طوری الی آخر. برای این کار صفحه بندی پیش فرض گریدویو کنار گذاشته میشه و باید از صفحه بندی سفارشی شده استفاده کنیم.

لینک زیر می تونه مفید باشه:
http://www.dotnettips.info/post/946/%D9%88%D8%A7%DA%A9%D8%B4%DB%8C-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-chunk-chunk-%D8%AA%DA%A9%D9%87-%D8%AA%DA%A9%D9%87-%D9%88-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%AF%D8%B1-listview

خیلی ممنون سورس کمی ساده تر هم میتونید معرفی کنید.entity نباشه

saeed31641
پنج شنبه 01 فروردین 1392, 16:34 عصر
دوست عزیز گرید بصورت مجازی هست ولی سمت سرور .سمت شما همون تعدادی رو که میخای نشون میده. شما اگه با صفحه بندی گرید راحت نیستی باید دیتا لیست اسفاده کنی که باید خودتون صفحه بندیشو سفارشی کنی.

tree1371
پنج شنبه 01 فروردین 1392, 16:35 عصر
به بین یک ایده میدم امیدوارم کمکت کنه

اولین که تبریک می گم که به این مسائل ریز فکر می کنی دوم اینکه به نظر من بهتر هست این کارو کنی شما بهتر هست شماره صفحه رو بگیرید و قبل از select کردن در query روی تاون عملیان انجام بدید مثلا صفحه 1 بگید 1*10 = 10 و 10-10 =0پس از رکورد 0 تا بخود صفحه 2 میشه 2 * 10 = 20 و 20-10 = 10 پس از 10 تا 20 بخون و صفحه 3 میشه 3*10 = 30 و 30-10 = 20 از 20 تا 30 بخون

یک همچین قانونی رو پیادهع کنی حل هست.

البته این یک ایده بود بقیش با شماست

p.parsaee
پنج شنبه 01 فروردین 1392, 19:56 عصر
خواهش می کنم ببین این به دردت می خوره :
http://www.aspsnippets.com/Articles/Custom-Paging-in-ASP.Net-GridView-using-SQL-Server-Stored-Procedure.aspx

barzin144
پنج شنبه 01 فروردین 1392, 21:04 عصر
دوست عزیز گرید بصورت مجازی هست ولی سمت سرور .سمت شما همون تعدادی رو که میخای نشون میده. شما اگه با صفحه بندی گرید راحت نیستی باید دیتا لیست اسفاده کنی که باید خودتون صفحه بندیشو سفارشی کنی.

مرسی از پاسختون ولی واقعا به شک افتادم چون گرید ام عکس زیاد داره گفتم اگه قراره همرو بیاره بعد نشون بده که خیلی سرعت میاد پایین،
این که سمت سرور هم همه داده ها رو میاره تو حافظه باز هم روی سرعت لود صفحه تاثیر داره؟

barzin144
پنج شنبه 01 فروردین 1392, 21:08 عصر
به بین یک ایده میدم امیدوارم کمکت کنه

اولین که تبریک می گم که به این مسائل ریز فکر می کنی دوم اینکه به نظر من بهتر هست این کارو کنی شما بهتر هست شماره صفحه رو بگیرید و قبل از select کردن در query روی تاون عملیان انجام بدید مثلا صفحه 1 بگید 1*10 = 10 و 10-10 =0پس از رکورد 0 تا بخود صفحه 2 میشه 2 * 10 = 20 و 20-10 = 10 پس از 10 تا 20 بخون و صفحه 3 میشه 3*10 = 30 و 30-10 = 20 از 20 تا 30 بخون

یک همچین قانونی رو پیادهع کنی حل هست.

البته این یک ایده بود بقیش با شماست

مثلا شما سایت هایی که برای دانلود فیلم هستند با وردپرس دیدیت؟ وقتی صفحه دو می زنیم به آدرس 2/pages/ اضافه میشه، من query string فک میکردم باید page&=2 باشه ولی اینجوری خیلی قشنگ تره، میخوام اینجوری باشه

tree1371
پنج شنبه 01 فروردین 1392, 21:20 عصر
مثلا شما سایت هایی که برای دانلود فیلم هستند با وردپرس دیدیت؟ وقتی صفحه دو می زنیم به آدرس 2/pages/ اضافه میشه، من query string فک میکردم باید page&=2 باشه ولی اینجوری خیلی قشنگ تره، میخوام اینجوری باشه

اوهوم این بر می گرده قبه url writing که مبحث بسیار مهمی نیز برای سئو هست هم می تونید در انجمن سرچ کنید هم اینکه به لینک زیر برید یا خودتون سرچ بیشتری کنید.

http://www.codeproject.com/Articles/33341/URL-Rewriting-using-ASP-NET-for-SEO

saeed31641
پنج شنبه 01 فروردین 1392, 22:18 عصر
ببین دوست عزیز شما باید فرق صفحه بندی سفارشی و گرید بدونی.
هر کدوم از اینا تو لود صفحه تاثیر داره.شما حتی سفرشیم بکنی تو. لود تاثیر داره چون خودت میگی چند تا چند تا بخونی. گرید هم واسع هر پیج میره سمت سرور و بر میگردد.شما با هر روشی بری اینکار انجام میشه.مگه اینکه شما تمام دادهات در یک صفحه نشون بدی.این لینکم که دادی از پروسیجر استفاد کرده خودش تعریف کرده @PageIndex INT = 1 ,@PageSize INT = 10
بازم سمت سرو میره.در کل بگم سفارشی کردن ربطی به این نداره که سرعت لود بیاد پایین .

dabirsiaghi
جمعه 02 فروردین 1392, 17:31 عصر
خوب داستان که مشخصه اگر از گرید ویو به حالت طبیعی استفاده کنید کل دیتا را می آورد و بعد صفحه بندی میکند
برای حل این مشکل دو راه وجود دارد :
1- استفاده از Object datasource
2-سفارشی کردن گرید
البته نوع خواند از دیتابیس هم مهم نیست ممکنه EF ,Ado.net و... باشه
فعلن راه دوم رو میگم که یه ذره سخت تره

public class MyGridView : GridView
{
public bool HideEmptyDataText { get; set; }
public MyGridView()
{
if (!HideEmptyDataText)
this.EmptyDataText = "ركورد اطلاعاتي موجود نيست";
else
this.EmptyDataText = "";
this.AutoGenerateColumns = false;

}
public int CurrentPageIndex { get { return int.Parse(ddlPage.SelectedValue); } set { ddlPage.SelectedValue = value.ToString(); } }
public int CurrentRowNumber { get { return int.Parse(ddlRowsNumber.SelectedValue); } set { ddlRowsNumber.SelectedValue = value.ToString(); } }

DropDownList ddlPage = new DropDownList();
DropDownList ddlRowsNumber = new DropDownList();
Button btnFirst = new Button();
Button btnPrevious = new Button();
Button btnNext = new Button();
Button btnLast = new Button();



Label lblPager = new Label();
Label lblRowsNumber = new Label();
Label lblPageInformation = new Label();
Label lblRowInformation = new Label();

public int AllRecordCount { get; set; }

public delegate void GoPageClickedHandler(int PageIndex, int RowNumber, object sender);
public event GoPageClickedHandler OnGoPageClicked;


public delegate void PageChangedHandler(int PageIndex, int RowNumber, object sender);
public event PageChangedHandler OnPageChanged;

public delegate void RowsNumberChangedHandler(int PageIndex, int RowNumber, object sender);
public event RowsNumberChangedHandler OnRowsNumberChanged;

protected override void OnRowCreated(GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Footer)
{
if (Rows.Count > 0)
{
int cellse = e.Row.Cells.Count;
for (int i = cellse - 1; i >= 1; i--)
{
e.Row.Cells[i].Visible = false;
}
e.Row.Cells[0].ColumnSpan = e.Row.Cells.Count;

Table tblPager = new Table();



TableRow rowTop = new TableRow();

TableCell cellTop1 = new TableCell();
TableCell cellTop2 = new TableCell();


cellTop1.Controls.Add(btnLast);
cellTop1.Controls.Add(btnNext);
cellTop1.Controls.Add(btnPrevious);
cellTop1.Controls.Add(btnFirst);



cellTop1.Controls.Add(lblPager);
cellTop1.Controls.Add(ddlPage);

cellTop2.Controls.Add(lblRowsNumber);
cellTop2.Controls.Add(ddlRowsNumber);
rowTop.Cells.Add(cellTop1);
rowTop.Cells.Add(cellTop2);

TableRow rowButton = new TableRow();
TableCell cellButton1 = new TableCell();
TableCell cellButton2 = new TableCell();
cellButton1.Controls.Add(lblPageInformation);
cellButton2.Controls.Add(lblRowInformation);

rowButton.Cells.Add(cellButton1);
rowButton.Cells.Add(cellButton2);
tblPager.Rows.Add(rowTop);
tblPager.Rows.Add(rowButton);




e.Row.Cells[0].Controls.Add(tblPager);
}
}
}
protected override void OnDataBound(EventArgs e)
{


}
public void ApplyPager(int PageIndex, int RowNumber)
{
SetAllPageDDL1(PageIndex, RowNumber);
SetLableText1(PageIndex, RowNumber);
ddlPage.SelectedValue = PageIndex.ToString();
ddlRowsNumber.SelectedValue = RowNumber.ToString();

}
private void SetLableText1(int PageIndex, int RowNumber)
{
if (ddlPage.Items.Count > 0 && ddlRowsNumber.Items.Count > 0)
{

lblPageInformation.Text = string.Format("صفحه {0} از {1}", PageIndex, ddlPage.Items.Count);
int FirstRecord = (PageIndex - 1) * RowNumber + 1;
int LastRecord = FirstRecord + this.Rows.Count - 1;

lblRowInformation.Text = string.Format("رکورد {0} تا {1} از {2}", FirstRecord, LastRecord, AllRecordCount);
}
}
private void SetLableText()
{
if (ddlPage.Items.Count > 0 && ddlRowsNumber.Items.Count > 0)
{

lblPageInformation.Text = string.Format("صفحه {0} از {1}", ddlPage.SelectedValue, ddlPage.Items.Count);
int FirstRecord = (int.Parse(ddlPage.SelectedValue) - 1) * int.Parse(ddlRowsNumber.SelectedValue) + 1;
int LastRecord = FirstRecord + this.Rows.Count - 1;

lblRowInformation.Text = string.Format("رکورد {0} تا {1} از {2}", FirstRecord, LastRecord, AllRecordCount);
}
}
private void SetAllPageDDL1(int PageIndex, int RowNumber)
{
int page = 1;

if (ddlRowsNumber.Items.Count > 0 && AllRecordCount > 0)
{
int remain = AllRecordCount % RowNumber;
int Page1 = AllRecordCount / RowNumber;
if (remain == 0)
page = Page1;
else
page = Page1 + 1;

}

ddlPage.Items.Clear();
for (int i = 1; i <= page; i++)
{
ddlPage.Items.Add(new ListItem { Text = i.ToString(), Value = i.ToString() });
}

}
private void SetAllPageDDL()
{
int page = 1;

if (ddlRowsNumber.Items.Count > 0 && AllRecordCount > 0)
{
int remain = AllRecordCount % (int.Parse(ddlRowsNumber.SelectedValue));
int Page1 = AllRecordCount / (int.Parse(ddlRowsNumber.SelectedValue));
if (remain == 0)
page = Page1;
else
page = Page1 + 1;

}

ddlPage.Items.Clear();
for (int i = 1; i <= page; i++)
{
ddlPage.Items.Add(new ListItem { Text = i.ToString(), Value = i.ToString() });
}

}
protected override void OnInit(EventArgs e)
{
SetControlProperties();
base.OnInit(e);
}


private void SetControlProperties()
{
ShowFooter = true;

btnFirst.Click += new EventHandler(btnFirst_Click);
btnFirst.ID = "btnFirst";
btnFirst.Text = ">>";


btnPrevious.Click += new EventHandler(btnPrevious_Click);
btnPrevious.ID = "Previous";
btnPrevious.Text = ">";



btnNext.Click += new EventHandler(btnNext_Click);
btnNext.ID = "btnNext";
btnNext.Text = "<";



btnLast.Click += new EventHandler(btnLast_Click);
btnLast.ID = "btnLast";
btnLast.Text = "<<";


ddlPage.SelectedIndexChanged += new EventHandler(ddlPage_SelectedIndexChanged);
ddlPage.AutoPostBack = true;
ddlPage.ID = "ddlPage";


ddlRowsNumber.SelectedIndexChanged += new EventHandler(ddlRowsNumber_SelectedIndexChanged);
ddlRowsNumber.AutoPostBack = true;
ddlRowsNumber.ID = "ddlRowsNumber";


lblPager.Text = "صفحه";
lblRowsNumber.Text = "تعداد رکورد";


ddlRowsNumber.Items.Clear();
if (!DesignMode)
{
for (int i = int.Parse(ApplicationSettingsHandler.GetValue("GridViewRecordFirst")); i <= int.Parse(ApplicationSettingsHandler.GetValue("GridViewRecordLast")); i = i + int.Parse(ApplicationSettingsHandler.GetValue("GridViewRecordDistance")))
{
ddlRowsNumber.Items.Add(new ListItem { Text = i.ToString(), Value = i.ToString() });
}
}


}


void btnFirst_Click(object sender, EventArgs e)
{
if (OnGoPageClicked != null)
{

OnGoPageClicked(1, int.Parse(ddlRowsNumber.SelectedValue), this);
ddlPage.SelectedValue = "1";
SetLableText();
}

}
void btnPrevious_Click(object sender, EventArgs e)
{
if (OnGoPageClicked != null)
{
if (ddlPage.SelectedIndex != 0)
{
OnGoPageClicked(int.Parse(ddlPage.SelectedValue) - 1, int.Parse(ddlRowsNumber.SelectedValue), this);
ddlPage.SelectedValue = (int.Parse(ddlPage.SelectedValue) - 1).ToString();
SetLableText();
}
}
}
void btnNext_Click(object sender, EventArgs e)
{
if (OnGoPageClicked != null)
{
if (ddlPage.SelectedValue != ddlPage.Items.Count.ToString())
{
OnGoPageClicked(int.Parse(ddlPage.SelectedValue) + 1, int.Parse(ddlRowsNumber.SelectedValue), this);
ddlPage.SelectedValue = (int.Parse(ddlPage.SelectedValue) + 1).ToString();
SetLableText();
}
}
}
void btnLast_Click(object sender, EventArgs e)
{
if (OnGoPageClicked != null)
{

OnGoPageClicked(ddlPage.Items.Count, int.Parse(ddlRowsNumber.SelectedValue), this);
ddlPage.SelectedValue = ddlPage.Items.Count.ToString();
SetLableText();
}
}
void ddlPage_SelectedIndexChanged(object sender, EventArgs e)
{

if (OnPageChanged != null)
OnPageChanged(ddlPage.SelectedIndex + 1, int.Parse(ddlRowsNumber.SelectedValue), this);
SetLableText();
}
void ddlRowsNumber_SelectedIndexChanged(object sender, EventArgs e)
{

if (OnRowsNumberChanged != null)
OnRowsNumberChanged(ddlPage.SelectedIndex + 1, int.Parse(ddlRowsNumber.SelectedValue), this);
SetAllPageDDL();
SetLableText();
}

dabirsiaghi
جمعه 02 فروردین 1392, 17:36 عصر
اگر از پروسیجر استفاده میکنید این میتونه paging را پیاده سازی کند:

ALTER Proc [dbo].[Get_Users_Admin]
(
@UserGroupID int,
@PageIndex INT ,
@NumberOfRows INT ,
@SortColumnName VARCHAR(50) ,
@SortOrderBy VARCHAR(4)
)
As
Begin
Declare @StartRow int
Set @StartRow =(@PageIndex*@NumberOfRows)+1
SELECT
T.RN as RowNumber,
T.UserID,
T.UserName,
T.Email,
T.FirstName,
T.LastName,
T.IsOnline,
T.IsVerify,
T.InsertTime,
T.IsActive,
(Select Count(*) From User_UserGroup Where UserID=T.UserID) As UserGroupNumber
FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY
CASE WHEN @SortColumnName = 'Position' AND @SortOrderBy = 'asc' THEN Position END ASC,
CASE WHEN @SortColumnName = 'Position' AND @SortOrderBy = 'desc' THEN Position END DESC
) AS RN
,[UserID]
,[UserName]
,[Email]
,[FirstName]
,[LastName]
,[IsOnline]
,[IsVerify]
,[InsertTime]
,[IsActive]
FROM [dbo].[Users]
Where (@UserGroupID=0 Or (@UserGroupID<>0 And UserID in (Select UserID From User_UserGroup Where UserGroupID=@UserGroupID)))
And IsDeleted=0)T
WHERE T.RN BETWEEN @StartRow -@NumberOfRows AND @StartRow - 1
End

dabirsiaghi
جمعه 02 فروردین 1392, 17:40 عصر
و در نهایت به این شکل در می آید:

101773

در حال حاظر جائی هستم نمیتونم توضیح بیشتر بدم و مدل ObjectDatasource رو توضیح بدم اگه سوالی بود بفرمائید تا جواب بدم

barzin144
جمعه 02 فروردین 1392, 20:31 عصر
مدل ObjectDatasource رو توضیح بدید هم ممنون میشم

fakhravari
جمعه 02 فروردین 1392, 20:45 عصر
و در نهایت به این شکل در می آید:

101773

در حال حاظر جائی هستم نمیتونم توضیح بیشتر بدم و مدل ObjectDatasource رو توضیح بدم اگه سوالی بود بفرمائید تا جواب بدم


این همه کار کردی یه سمپل میزاشتی.
--------------------------------------
http://www.how2learnasp.net/article.aspx?code=b3a4d7da-5557-47cc-b6a2-31d8b7a69272

dabirsiaghi
جمعه 02 فروردین 1392, 22:00 عصر
با EF و Linq و ObjectDatasource یک سمپل زدم
اون روش اول رو هم بعدا میزارم
101787
در دیتابیس یک جدول هست با نام Person که اطلاعات اون با paging نمایش داده میشود و دیتا بصورت صفحه به صفحه لود می شودhttp://barnamenevis.org/images/misc/pencil.png
خود پروژه حجمش زیاد شد دی ال ال EF رو از پروژه حذف کردم خودتون بعدن بهش refrence بدین

کوئری دیتابیس :

CREATE TABLE [dbo].[Person](
[PersonID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED
(
[PersonID] 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 IDENTITY_INSERT [dbo].[Person] ON
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (1, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (2, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (3, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (4, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (5, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (6, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (7, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (8, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (9, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (10, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (11, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (12, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (13, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (14, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (15, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (16, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (17, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (18, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (19, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (20, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (21, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (22, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (23, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (24, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (25, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (26, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (27, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (28, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (29, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (30, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (31, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (32, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (33, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (34, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (35, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (36, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (37, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (38, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (39, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (40, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (41, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (42, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (43, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (44, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (45, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (46, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (47, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (48, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (49, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (50, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (51, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (52, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (53, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (54, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (55, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (56, N'مریم', N'دبیر')
SET IDENTITY_INSERT [dbo].[Person] OFF