PDA

View Full Version : مقاله: آموزش ساخت گرید ویو با قابلیت حذف چند رکورد در #C و VB(شبیه سازی mail box)



mehdishahabi
دوشنبه 23 دی 1387, 23:44 عصر
اینم مطلبی که قول داده بودم.
اگر شما تا به حال ایمیل خود را باز کرده باشید میبینید که قابلیت انتخاب چند ایمیل به وسیله CheckBox و حذف آن ها را دارید.در این مقاله به بررسی این سناریو به کمک GridView میپردازم.

همانطور که میدانیم کنترل GridView خاصیت حذف یک رکورد در یک لحظه را دارد و به ما امکان حذف جند رکورد همزمان را با انتخاب چک باکس نمیدهد.
در این مقاله ما میخواهیم این قابلیت را به GridView اضافه کنیم.

مثال ما به کمک بانک اصلاعاتی Northwind مایکروسافت اجرا شده

مراحل انجام کار

1-یک صفحه وب جدید با پسوند .aspx ایجاد کرده و یک کنترل GridView و یک کنترل

SqlDataSource را به آن صفحه اضافه کنید.


2- حال SqlDataSource خود را برای اتصال به جدول مورد نظر خود پیکربندی کنید و همچنین دستوراتی برای حذف کردن و انتخاب کردن داده از آن نیز به SqlDataSource خود اضافه کنید.

به عنوان مثال من از جدول Employees بانک Northwind به ترتیب زیر استفاده کردم.

<asp:SqlDataSource ID="SqlDataSource1" Runat="server"
SelectCommand="SELECT EmployeeID, LastName, City FROM Employees"
DeleteCommand="DELETE FROM Employees WHERE [EmployeeID] = @EmployeeID"
ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" >
<DeleteParameters>
<asp:Parameter Name="EmployeeID" />
</DeleteParameters>
</asp:SqlDataSource>


3-حال که پیکربندی SqlDataSourceپایان یافت آن رابه GridView برنامه خود Bind کنید.

4- حال باید یک چک باکس به ازای هر ردیف از داده هایمان اضافه کنیم برای انجام این کار
مراحل زیر را اجرا کنید

4 -1:
یک TemplateField درون <Columns> ایجاد کرده و همچنین ستون های مورد نظر خود برای نمایش نیز به <Columns> اضافه کنید .

4-2 :
درون TemplateField یک ItemTemplate درون آن ایجاد کرده و سپس یک چکباکس به آن اضافه کنید

نمونه کد :


<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkRows" runat="server"/>
</ItemTemplate>
</asp:TemplateField>

5- حال یک Button برای حذف دسته جمعی به صفحه اضافه کنید و آن را به btnMultipleRowDelete تفییرنام دهید.

در نهایت ما در فایل aspx خود این کد را تولید کردیم.


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID" DataSourceID="SqlDataSource1">

<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="cbRows" runat="server"/>
</ItemTemplate>
</asp:TemplateField>

<asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" InsertVisible="False" ReadOnly="True" SortExpression="EmployeeID" />
<asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
<asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
</Columns>
</asp:GridView>

<asp:SqlDataSource ID="SqlDataSource1" Runat="server"
SelectCommand="SELECT EmployeeID, LastName, City FROM Employees"
DeleteCommand="DELETE FROM Employees WHERE [EmployeeID] = @EmployeeID"
ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" >
<DeleteParameters>
<asp:Parameter Name="EmployeeID" />
</DeleteParameters>
</asp:SqlDataSource>

<asp:Button
ID="btnMultipleRowDelete"
OnClick="btnMultipleRowDelete_Click"
runat="server"
Text="Delete Rows" />

حال در فایل کد خود که با پسوند cs. برای #C و یا vb. برای VB کد زیر را نوشته



C#


protected void btnMultipleRowDelete_Click(object sender, EventArgs e)
{
// Looping through all the rows in the GridView
foreach (GridViewRow row in GridView1.Rows)
{
CheckBox checkbox = (CheckBox)row.FindControl("cbRows");

//Check if the checkbox is checked.
//value in the HtmlInputCheckBox's Value property is set as the //value of the delete command's parameter.
if (checkbox.Checked)
{
// Retreive the Employee ID
int employeeID = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);
// Pass the value of the selected Employye ID to the Delete //command.
SqlDataSource1.DeleteParameters["EmployeeID"].DefaultValue = employeeID.ToString();
SqlDataSource1.Delete();
}
}
}

VB.NET

ProtectedSub btnMultipleRowDelete_Click(ByVal sender AsObject, ByVal e As EventArgs) ' Looping through all the rows in the GridView


ForEach row As GridViewRow In GridView1.Rows
Dim checkbox As CheckBox = CType(row.FindControl("cbRows"), CheckBox)
'Check if the checkbox is checked. 'value in the HtmlInputCheckBox's Value property is set as the //value of the delete command's parameter.




If checkbox.Checked Then
' Retreive the Employee ID
Dim employeeID AsInteger = Convert.ToInt32(GridView1.DataKeys(row.RowIndex).V alue)
' Pass the value of the selected Employye ID to the Delete //command.
SqlDataSource1.DeleteParameters("EmployeeID").DefaultValue = employeeID.ToString()
SqlDataSource1.Delete()
EndIf
Next row
EndSub



»» مهدی شهابی

salehbagheri
سه شنبه 24 دی 1387, 22:04 عصر
برادر عزيز! بسيار عالي است!
همانطور كه امام صادق (ع) فرمودند: زكات دانش، آموختن آن به ديگران است! اميدوارم همه دوستان دانش خودشون رو به بقيه آموزش بدهند!
اگر كدهاتون رو هم به صورت يه فايل، براي دانلود بزاريد بدك نيست!

mehdishahabi
چهارشنبه 25 دی 1387, 03:24 صبح
انشالله در آموزش های آتی سعی میکنم اینکار رو انجام بدم

baharkabiri
چهارشنبه 25 دی 1387, 13:06 عصر
خیلی ممنون بابت این مطلب که من مدت زیادیه درگیرشم.اگه query رو در قسمت advanced نوشته باشیم و enable deleting فعال نباشه چی؟میشه این کارو کرد؟

mehdishahabi
چهارشنبه 25 دی 1387, 16:29 عصر
اصلا این نوع طراحی کاری به فعال یا غیر فعال بودن enable deleting نداره
منظورتون رو از قسمت advanced رو نمیفهمم
ولی در کل شما باید به ازای هر سطری که میخواید حذف کنید یکبار دستور Delete رو اجرا کنید

mahallat
جمعه 25 اردیبهشت 1388, 20:37 عصر
با سلام
کدی که نوشتید IDگرید را بر میگرداند ولی عملیات حذف را انجام نمی دهد.
لطفا فایل این کد را قرار دهید.

iman_ad
شنبه 26 اردیبهشت 1388, 17:20 عصر
فکر می کنم کدی که آقای راد گذاشتن خیلی کامل باشه. متدهایی که بکار بردین high class نیست

peymannaji
شنبه 26 اردیبهشت 1388, 17:35 عصر
فکر می کنم کدی که آقای راد گذاشتن خیلی کامل باشه. متدهایی که بکار بردین high class نیست


بحث اینکه کی کدش با کلاس تر باشه در این مکان مهم نیست بلکه تبادل اطلاعات در هر سطح مطرح است . بفرض مثال اگر هم جایی بتواند بهینه تر نوشته شود اون وظیفه دیگر دوستان هست که کمک کنند ... به نظر من هر فردی با هر سطح اطلاعاتی اگر بتواند حتی به اندازه نوک سوزن یک فرد دیگر رو به تامل در مورد موضوع مطرح شده وادار کنه این خودش یک دنیا ارزش داره دیگه چه برسه به اینکه بخواهد چیزی رو آموزش بده ...

و از دوستمون که این مطلب رو آموزش دادن تشکر میکنم .

milade
سه شنبه 29 اردیبهشت 1388, 21:42 عصر
http://barnamenevis.org/forum/showpost.php?p=719128&postcount=2

YourWorldToday
جمعه 01 خرداد 1388, 00:41 صبح
با سلام
سوال من این هستش که چطور می تونیم checkbox های رو که مقدارش false هستش رو به true تغییر بدیم(یا بلعکس) و بعد تغییرات رو داخل gridview نمایش بدیم
با تشکر

maryam125
سه شنبه 17 شهریور 1388, 13:50 عصر
سلام

ميخوام بدونم چطور ميشه check box رو بذارم توي هر ركورد grid view .با سي شارپ رو ميخوام بدونم.