shirin71
08-07-2011, 08:18 AM
حذف ركوردهاي هاي تيك خورده در Gridview :
براي اينكار ابتدا يك صفحه ي webform.aspx ايجاد كنيد.
در صفحه يك گريدويو و يك sqlDataSource و يك دكمه قرار دهيد.
sqlDataSource رو به بانك موردنظرتون ربط داده و خاصيت DataSourceID مربوط به گريدويو رو برابر SqlDataSource1 قرار بديد.
به گريدويو خود يك ستون اضافه كنيد به طريقه زير:
به قسمت سورس رفته، و در بين تگ هاي gridview خود تگ <Columns> </Columns> قرار دهيد سپس يك TemplateField اضافه كنيد. در نهايت كدي مشابه زير ايجاد كنيد:
<asp:GridView ID="GridView1" runat="server" DataKeyNames="NewsId" DataSourceID="Sqldatasource1">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="CheckAll" onclick="return check_uncheck (this );" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="nID" Visible="false" Text='<%# DataBinder.Eval (Container.DataItem, "NewsId") %>'
runat="server" />
<asp:CheckBox ID="deleteRec" onclick="return check_uncheck (this );" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
در اينجا DataKeyNames برابر فيلد كليد در جدول موردنظر قرار مي دهيم.
در <HeaderTemplate> يك چكباكس گذاشته شده جهت انتخاب تمامي سطرها مي باشد .
در رويداد onclick يك تابع جاواسكريپت فراخواني ميكنيم كه توسط اين تابع تمامي سطرها انتخاب/لغوانتخاب مي شوند.
در <ItemTemplate> چك باكسي كه قرار داديم براي هر سطر مي باشد.
كدهاي جاواسكريپت زير را در تگ bodyقرار دهيد:
<script type="text/javascript">
function check_uncheck (Val)
{
var ValChecked = Val.checked;
var ValId =Val.id;
var frm = document.forms[0];
// Loop through all elements
for (i=0; i<frm.length; i++)
{
// Look for Header Template's Checkbox
if (this!=null)
{ if (ValId.indexOf ('CheckAll') != -1)
{
// Check if main checkbox is checked, then select or deselect datagrid checkboxes
if(ValChecked) frm.elements[i].checked = true;
else frm.elements[i].checked = false;
}
else if (ValId.indexOf ('deleteRec') != -1)
{
// Check if any of the checkboxes are not checked, and then uncheck top select all checkbox
if(frm.elements[i].checked == false) frm.elements[1].checked = false; }
}// if
}// for
}// function
function confirmMsg (frm)
{
// loop through all elements
for (i=0; i<frm.length; i++)
{
// Look for our checkboxes only
if (frm.elements[i].name.indexOf("deleteRec") !=-1)
{
// If any are checked then confirm alert, otherwise nothing happens
if(frm.elements[i].checked) return confirm ('Are you sure you want to delete your selection(s)?')
}
}
}
</script>
در رويداد onclick دكمه دستورات زير روبنويسيد:
Dim gvIDs As String = ""
Dim chkBox As Boolean = False
For Each gv As GridViewRow In GridView1.Rows
Dim deleteChkBxItem As CheckBox = CType(gv.FindControl("deleteRec"), CheckBox)
If deleteChkBxItem.Checked Then
chkBox = True
gvIDs += CType(gv.FindControl("nID"), Label).Text.ToString + ","
End If
Next
Dim cn As SqlConnection = New SqlConnection(Sqldatasource1.ConnectionString)
If chkBox Then
Try
Dim deleteSQL As String = "DELETE from news WHERE newsid IN (" + gvIDs.Substring(0, gvIDs.LastIndexOf(",")) + ")"
Dim cmd As SqlCommand = New SqlCommand(deleteSQL, cn)
cn.Open()
cmd.ExecuteNonQuery()
GridView1.DataBind()
Catch err As SqlException
Response.Write(err.Message.ToString)
Finally
cn.Close()
End Try
End If
در ضمن Imports System.Data.SqlClient رو در ابتداي صفحه ي code-behind قرار بديد.
موفق باشيد.
براي اينكار ابتدا يك صفحه ي webform.aspx ايجاد كنيد.
در صفحه يك گريدويو و يك sqlDataSource و يك دكمه قرار دهيد.
sqlDataSource رو به بانك موردنظرتون ربط داده و خاصيت DataSourceID مربوط به گريدويو رو برابر SqlDataSource1 قرار بديد.
به گريدويو خود يك ستون اضافه كنيد به طريقه زير:
به قسمت سورس رفته، و در بين تگ هاي gridview خود تگ <Columns> </Columns> قرار دهيد سپس يك TemplateField اضافه كنيد. در نهايت كدي مشابه زير ايجاد كنيد:
<asp:GridView ID="GridView1" runat="server" DataKeyNames="NewsId" DataSourceID="Sqldatasource1">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="CheckAll" onclick="return check_uncheck (this );" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="nID" Visible="false" Text='<%# DataBinder.Eval (Container.DataItem, "NewsId") %>'
runat="server" />
<asp:CheckBox ID="deleteRec" onclick="return check_uncheck (this );" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
در اينجا DataKeyNames برابر فيلد كليد در جدول موردنظر قرار مي دهيم.
در <HeaderTemplate> يك چكباكس گذاشته شده جهت انتخاب تمامي سطرها مي باشد .
در رويداد onclick يك تابع جاواسكريپت فراخواني ميكنيم كه توسط اين تابع تمامي سطرها انتخاب/لغوانتخاب مي شوند.
در <ItemTemplate> چك باكسي كه قرار داديم براي هر سطر مي باشد.
كدهاي جاواسكريپت زير را در تگ bodyقرار دهيد:
<script type="text/javascript">
function check_uncheck (Val)
{
var ValChecked = Val.checked;
var ValId =Val.id;
var frm = document.forms[0];
// Loop through all elements
for (i=0; i<frm.length; i++)
{
// Look for Header Template's Checkbox
if (this!=null)
{ if (ValId.indexOf ('CheckAll') != -1)
{
// Check if main checkbox is checked, then select or deselect datagrid checkboxes
if(ValChecked) frm.elements[i].checked = true;
else frm.elements[i].checked = false;
}
else if (ValId.indexOf ('deleteRec') != -1)
{
// Check if any of the checkboxes are not checked, and then uncheck top select all checkbox
if(frm.elements[i].checked == false) frm.elements[1].checked = false; }
}// if
}// for
}// function
function confirmMsg (frm)
{
// loop through all elements
for (i=0; i<frm.length; i++)
{
// Look for our checkboxes only
if (frm.elements[i].name.indexOf("deleteRec") !=-1)
{
// If any are checked then confirm alert, otherwise nothing happens
if(frm.elements[i].checked) return confirm ('Are you sure you want to delete your selection(s)?')
}
}
}
</script>
در رويداد onclick دكمه دستورات زير روبنويسيد:
Dim gvIDs As String = ""
Dim chkBox As Boolean = False
For Each gv As GridViewRow In GridView1.Rows
Dim deleteChkBxItem As CheckBox = CType(gv.FindControl("deleteRec"), CheckBox)
If deleteChkBxItem.Checked Then
chkBox = True
gvIDs += CType(gv.FindControl("nID"), Label).Text.ToString + ","
End If
Next
Dim cn As SqlConnection = New SqlConnection(Sqldatasource1.ConnectionString)
If chkBox Then
Try
Dim deleteSQL As String = "DELETE from news WHERE newsid IN (" + gvIDs.Substring(0, gvIDs.LastIndexOf(",")) + ")"
Dim cmd As SqlCommand = New SqlCommand(deleteSQL, cn)
cn.Open()
cmd.ExecuteNonQuery()
GridView1.DataBind()
Catch err As SqlException
Response.Write(err.Message.ToString)
Finally
cn.Close()
End Try
End If
در ضمن Imports System.Data.SqlClient رو در ابتداي صفحه ي code-behind قرار بديد.
موفق باشيد.