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
»» مهدی شهابی
اگر شما تا به حال ایمیل خود را باز کرده باشید میبینید که قابلیت انتخاب چند ایمیل به وسیله 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
»» مهدی شهابی