利用回调实现GridView的批量删除并提示删除的记录数
在一个项目中,需要实现GridView的中数据的批量删除,还是在删除前确认删除记录的数量.
以下的方法,页面在不生产PostBack的情况下取到所需的数据.
ASPX主要代码和脚本:
function GetLevelHtmlClient(text)
{
var pos1=text.lastIndexOf(',')+1;
var pos2=text.length;
var count=text.substring(pos1,pos2);
if(confirm('你确定要删除 '+count+' 条留言吗?'))
{
PageMethods.DeleteData(text,onSuccessCheck);
postBackHiddenField('<%=HiddenField_list.ClientID %>');
}
else return;
}
function postBackHiddenField(hiddenFieldID) {
var hiddenField = $get(hiddenFieldID);
if (hiddenField) {
hiddenField.value = (new Date()).getTime();
__doPostBack(hiddenFieldID,'');
}
}
<asp:UpdatePanel ID="UpdatePanel_list" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
<ContentTemplate>
<div align="center">
<center>
<asp:DataGrid ID="PolicyDataGrid" runat="server" CssClass="GridList" Width="100%"
AutoGenerateColumns="False" CellPadding="2" DataKeyField="id">
<ItemStyle HorizontalAlign="Center" CssClass="GridList_Item"></ItemStyle>
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" CssClass="GridList_Header"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="选择">
<HeaderStyle Width="5%" />
<ItemTemplate>
<asp:CheckBox ID="Cbx1" runat="server" Checked="false" AutoPostBack="true" />
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn Visible="false">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"id") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="标题">
<HeaderStyle Width="35%"></HeaderStyle>
<ItemTemplate>
<asp:HyperLink ID="Hyperlink1" CssClass="a03" runat="server" NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "id","MessageBoard_Edit.aspx?SubWebItemNo="+Request["SubWebItemNo"].ToString()+"&id={0}&action=1") %>'
Text='<%# DataBinder.Eval(Container.DataItem, "Titles") %> '>
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="时间">
<HeaderStyle Width="10%"></HeaderStyle>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "dates", "{0:yyyy-MM-dd}")%>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid></center>
</div>
<asp:HiddenField ID="HiddenField_list" runat="server" OnValueChanged="HiddenField_list_ValueChanged" />
</ContentTemplate>
</asp:UpdatePanel>
<input type="button" runat="server" class="if wd2 btn 90V" value="批量删除" onclick="GetLevelHtmlServer()" />
CS主要代码:
public partial class MessageBoard_list : ICallbackEventHandler //该类继承接口ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
ClientScriptManager csm = this.ClientScript;
string GetLevelHtmlClient = csm.GetCallbackEventReference(this, "sqlString", "GetLevelHtmlClient", "");
string GetLevelHtmlServer = "function GetLevelHtmlServer (sqlString) { " + GetLevelHtmlClient + "; }";
csm.RegisterClientScriptBlock(this.GetType(), "Init", GetLevelHtmlServer, true);
}
//实现接口ICallbackEventHandler的方法GetCallbackResult和RaiseCallbackEvent
string returnValue = "";
public string GetCallbackResult()
{
return returnValue;
}
public void RaiseCallbackEvent(string eventArgument)
{
string text = eventArgument;
returnValue = GetCount();
}
//自定义方法,实现选中的记录的回传
public string GetCount()
{
int count = 0;
string ids = string.Empty;
for (int i = 0; i < this.PolicyDataGrid.Items.Count; i++)
{
CheckBox cbx = (CheckBox)this.PolicyDataGrid.Items[i].Cells[0].FindControl("Cbx1");
if (cbx.Checked)
{
count++;
ids = ids + PolicyDataGrid.DataKeys[i].ToString() + ",";
}
}
return ids + count.ToString();
}
//删除数据
[System.Web.Services.WebMethod]
public static int DeleteData(string ids)
{
if (ids.Length > 1)
{
try
{
Lzgjj.BLL.MessageBoard BLL = new Lzgjj.BLL.MessageBoard();
string str = string.Empty;
str = ids.Substring(0, ids.LastIndexOf(','));
if (str.Length > 0)
{
BLL.Delete(str);
}
}
catch
{
}
}
return 0;
}
protected void HiddenField_list_ValueChanged(object sender, EventArgs e)
{
this.InitPage();
UpdatePanel_list.Update();
}
}