上次的给出了演示效果,这次就把代码一些细节说明一下.
首先说明下这个例子用到的结构和基类:
1、具有dataGrid的页面继承了ListDataPage这个类,而ListDataPage类又继承了PageBase这个页面类。
其中PageBase你可以写一些页面上最基本的属性,方法等。
基本的代码如下:
/**/
/********************************************************************
created: 2007/06/08
filename: \App_Code\PageBase.cs
file path: \App_Code
file base: PageBase
author: chengang
information: 页面的基类


*********************************************************************/


using
System;
using
System.Web;
using
System.Data;
using
System.Web.UI.WebControls;
using
System.Text;
using
System.Configuration;
using
System.Drawing;
using
System.Data.SqlClient;
using
EMEFRAME.UIControl;
using
System.Web.UI.HtmlControls;

namespace
EMEFRAME

{

/**//// <summary>
/// 页面的基类
/// </summary>
public class PageBase : System.Web.UI.Page

{

私有变量#region 私有变量

/**//// <summary>
/// 公用调试结果
/// </summary>
protected int iResult = 0;

/**//// <summary>
/// 页面开始执行时间
/// </summary>
private DateTime _StartTime;
private string _MenuCode;
//public EMEFRAME.BaseException Exc = new EMEFRAME.BaseException();
#endregion

protected HtmlLink css;
public PageBase()

{
//记录页面的开始执行时间


_StartTime = DateTime.Now;
}


属性#region 属性



/**//// <summary>
/// 应用程序路径 如:/EOffice_ora
/// </summary>
public string ApplicationPath

{
get

{
return Request.ApplicationPath.ToString();
}
}
public string UserHostIP

{
get

{
return HttpContext.Current.Request.UserHostAddress;
}
}

/**//// <summary>
/// 当前页的菜单编号
/// </summary>
public string MenuCode

{
get

{
return _MenuCode;
}
set

{
_MenuCode = value;
}
}

/**//// <summary>
/// 当前页的权限串


/// </summary>
public string Privilege

{
get

{
return "";//MenuCheck(Login_User.MenuList, MenuCode);
}
}

/**//// <summary>
/// 样式css文件加载,
/// </summary>
public string CssHref

{
get

{
return css.Attributes["href"];
}
set

{
css.Attributes["href"] = value;
}
}

#endregion



/**//// <summary>
/// 根据条件判断返回页面执行时间
/// </summary>
/// <returns></returns>
public string PageLoadTime()

{
TimeSpan usedTime = DateTime.Now - this._StartTime;
return ("页面执行时间:" + usedTime.TotalSeconds + "秒");
}



重载方法#region 重载方法

/**//// <summary>
/// 重载Load方法
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)

{
//============================================================================
//清除缓存
//============================================================================
Response.Cache.SetNoStore();
//if (!PublicClass.LoadSession(Page))
// return;
if (!this.IsPostBack)

{
LoadCss.LoadPageCSS(Page);

}
base.OnLoad(e);
}


/**//// <summary>
/// 重载OnPreRender方法
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)

{
base.OnPreRender(e);
}

/**//// <summary>
/// 初始化


/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)

{
//动态加载css文件
css = new HtmlLink();
css.Attributes.Add("type", "text/css");
css.Attributes.Add("rel", "stylesheet");
css.Attributes.Add("href", "/Css/style.css");
this.Header.Controls.Add(css);
base.OnInit(e);
}

/**//// <summary>
/// 重载错误处理
/// </summary>
/// <param name="e"></param>
protected override void OnError(EventArgs e)

{
//Server.Transfer("/ErrorPage.aspx" , false);
base.OnError(e);
}


/**//// <summary>
/// 卸载页面,释放CONN
/// </summary>
/// <param name="e"></param>
protected override void OnUnload(EventArgs e)

{
// this.Exc = null;
}
#endregion


常用页面方法#region 常用页面方法

/**//// <summary>
/// 弹出对话框
/// 修改人;陈刚
/// 修改内容:增加在ajax页面的支持
/// 修改日期:2007-6-15
/// </summary>
/// <param name="strAlert"></param>
public void alert(string strAler)

{
System.Web.UI.UpdatePanel objUp = (System.Web.UI.UpdatePanel)this.FindControl("UpdatePanel1");
if (objUp != null)

{
System.Web.UI.ScriptManager.RegisterStartupScript(objUp, objUp.GetType(), "", " alert('" + strAler + "');", true);
}
else if (!this.IsStartupScriptRegistered("alt"))

{
this.RegisterStartupScript("alt", @"<script language=""javascript"">alert('" + strAler + @"');</script>");
}
}
protected string MenuCheck(string MenuList, string MenuCode)

{
string[] MenuLimt = MenuList.Split('|');
for (int i = 0; i < MenuLimt.Length; i++)

{
string[] Limt = MenuLimt[i].Split(',');
if (MenuCode == Limt[0].ToString())

{
return Limt[1];
}
}
return "";
}
#endregion


/**//******************************************************************/
//系统权限操作方法
//要求每个页面PageLoad中进行调用并且传进相应的MenuCode
//作者:陈刚 时间:2007-6-26

/**//******************************************************************/


取得菜单权限(查看arr[0]、增加arr[1],删除arr[2]、修改arr[3],arr[4]审核 大小为5列:arr[0]==true表示其有查看的权限
#region 取得菜单权限(查看arr[0]、增加arr[1],删除arr[2]、修改arr[3],arr[4]审核 大小为5列:arr[0]==true表示其有查看的权限

/**//// <summary>
///取得菜单权限(查看arr[0]、增加arr[1],删除arr[2],修改arr[3],arr[4]审核 大小为5列:arr[0]==true表示其有查看的权限
/// </summary>
/// <param name="MenuCode">菜单ID</param>
/// <param name="UserID">用户名</param>
/// <returns></returns>
public bool[] ReturnMenuLimitArray()

{
bool[] Arr = new bool[5];

/**//*返回当前菜单权限的bool形式*/
string[] privStr = this.Privilege.Split('*');
for (int i = 0; i < 5; i++)

{
if (privStr.Length <= 1)
Arr[i] = false;
else
Arr[i] = privStr[i].ToString() == "1" ? true : false;
}
return Arr;
}
#endregion


设置页面显示\隐藏权限按钮的方法这里要求所有操作按钮和本方法中同名,否则是无法找到的#region 设置页面显示\隐藏权限按钮的方法这里要求所有操作按钮和本方法中同名,否则是无法找到的


/**//// <summary>
///设置页面显示\隐藏权限按钮的方法,这里要求所有操作按钮和本方法中同名,否则是无法找到的
/// </summary>

protected void ShowHiddenControl()

{
System.Web.UI.WebControls.DataGrid v_Grd;//DataGrid
System.Web.UI.HtmlControls.HtmlInputButton v_Add;//新增
System.Web.UI.HtmlControls.HtmlInputButton v_Ok;//保存(增加,修改时)

bool[] arr = ReturnMenuLimitArray();
if (!arr[0])//查看功能

{
Server.Transfer("/ErrorLimitPage.htm", false);
return;
}
v_Add = (HtmlInputButton)this.FindControl("btnAddNew");
if (v_Add != null)
v_Add.Visible = arr[1];
v_Ok = (HtmlInputButton)this.FindControl("btn_Ok");
if (v_Ok != null)
v_Ok.Visible = arr[3];
v_Grd = (DataGrid)this.FindControl("DataGridList");
if (v_Grd != null)

{

/**//*查找存在DataGrid的页面里面的操作按钮*/
foreach (System.Web.UI.WebControls.DataGridColumn v_Grc in v_Grd.Columns)

{
// if (v_Grc..GetType() == System.Web.UI.WebControls.TemplateColumn)

{
if (v_Grc.HeaderText == "修改")

{
v_Grc.Visible = arr[3];

}
else if (v_Grc.HeaderText == "删除")

{
v_Grc.Visible = arr[2];

}
else if (v_Grc.HeaderText == "审核")

{
v_Grc.Visible = arr[4];

}
}
}
}

}
#endregion
}

}
里面有alert这个可以基于ajax页面中实现js中alert功能,有权限控制功能,这些可以结合自己的项目写一些常用方法,还有css页面加载和常用js脚本加载等公用方法。
另外它的子类ListDataPage(针对有DataGrid的页面)的代码如下:
/**/
/********************************************************************
created: 2007/01/17
filename: \App_Code\ListDataPage.cs
file path: \App_Code
file base: ListDataPage
author: chengang
information: 数据列表页的基类
*********************************************************************/


using
System;
using
System.Web;
using
System.Data;
using
System.Web.UI.WebControls;
using
System.Text;
using
System.Configuration;
using
System.Drawing;
using
System.Data.SqlClient;
using
EMEFRAME.UIControl;
using
System.Web.UI.HtmlControls;

namespace
EMEFRAME

{

/**//// <summary>
/// 数据列表页的基类
/// </summary>
public class ListDataPage : PageBase

{
public const int maxSortCount = 1;
AspNetPager objPager;
DataGrid objDataGrid;

public ListDataPage()
{ }
public void InitAspNetPager(AspNetPager po_Pager)

{
//动态设置用户自定义文本内容
//分页数量
po_Pager.UrlPaging = false;
po_Pager.TextAfterSelectBox = "<font color='#0066cc'>条</font>";
po_Pager.TextBeforeSelectBox = "<font color='#0066cc'>每页</font>";
po_Pager.PageSize = 20;
//显示几个页数
po_Pager.NumericButtonCount = 10;
//是否一定显示分页控件
po_Pager.AlwaysShow = true;
//自定义信息存放位置
po_Pager.ShowCustomInfoSection = EMEFRAME.UIControl.ShowCustomInfoSection.Left;
//索引文本框显示方式
po_Pager.ShowInputBox = EMEFRAME.UIControl.ShowInputBox.Always;
po_Pager.ShowSelectBox = EMEFRAME.UIControl.ShowInputBox.Always;
//分页信息存放位置
po_Pager.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Right;
//设置按钮的属性
po_Pager.SubmitButtonClass = "ButtonCss";
po_Pager.SubmitButtonOnMouseOut = "ButtonCss";
po_Pager.SubmitButtonOnMouseOver = "ButtonCss_Over";
po_Pager.SubmitButtonText = "Go";

//设置按钮的属性
po_Pager.SelectBoxClass = "ButtonCss";
po_Pager.SelectBoxOnMouseOut = "ButtonCss";
po_Pager.SelectBoxOnMouseOver = "ButtonCss_Over";
}

页面的排序表达式#region 页面的排序表达式

/**//// <summary>
/// 页面的排序字段
/// </summary>
public string SortExpression

{
get

{
return this.ViewState["SortExpression"].ToString();
}
set

{
if (value != "")

{
string newValue = value.Trim().ToUpper();
string sValue = this.ViewState["SortExpression"].ToString().Trim().ToUpper();
bool isExsit = false;
if (newValue == sValue)

{
isExsit = true;
}
if (isExsit) //如果找到原来已经有在排序范围内

{
this.SortDirection = !this.SortDirection;
}
else

{
this.SortDirection = true;
}
this.ViewState["SortExpression"] = newValue;
}
}
}

/**//// <summary>
/// 页面的排序方式:true-降序;false-升序
/// </summary>
public bool SortDirection

{
get

{
if(this.ViewState["SortDirection"] ==null)
this.ViewState["SortDirection"] = true;//默认为降序
return Convert.ToBoolean(this.ViewState["SortDirection"]);
}
set

{
this.ViewState["SortDirection"] = value;
}
}
#endregion 页面的排序表达式


分面控件排序 DataGridSortData#region 分面控件排序 DataGridSortData
public void DataGridSortData(System.Web.UI.WebControls.DataGridSortCommandEventArgs e)

{
this.SortExpression = e.SortExpression;
for (int i = 0; i < objDataGrid.Columns.Count; i++)

{
string colSort = objDataGrid.Columns[i].SortExpression.ToUpper().Trim();
if (objDataGrid.Columns[i].Visible && colSort != null && colSort != "")

{
int iIndex = objDataGrid.Columns[i].HeaderText.IndexOf("<f");
if(iIndex > 1 )

{
objDataGrid.Columns[i].HeaderText = objDataGrid.Columns[i].HeaderText.Substring(0, iIndex);
}
if (this.SortExpression == colSort)

{
//控制排序符号
if (SortDirection)
objDataGrid.Columns[i].HeaderText += "<font color=red size=3px style='font-weight:bolder'>↓</font>";
else
objDataGrid.Columns[i].HeaderText += "<font color=red size=3px style='font-weight:bolder'>↑</font>";
}
}
}
}
#endregion 分面控件排序 DataGridSortData
public void PagerBindDate()

{

objPager.CustomInfoHTML = "<font color='#0066cc'>页码</font> <font color=\"red\"><b>" + objPager.CurrentPageIndex + "</b></font> <font color='#0066cc'>of</font> " + objPager.PageCount;
if (objPager.RecordCount != 0)

{
objPager.CustomInfoHTML += " <font color='#0066cc'>当页记录</font> " + objPager.StartRecordIndex + "-" + objPager.EndRecordIndex;
}
else

{
objPager.CustomInfoHTML += " <font color='#0066cc'>当页记录</font> 0-0";
}
objPager.CustomInfoHTML += " <font color='#0066cc'>总记录</font> " + objPager.RecordCount;
EMEFRAME.LoadCss.SetDataGridItem(objDataGrid);
}

重载方法#region 重载方法

/**//// <summary>
/// 重载Load方法
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)

{
if (!this.IsPostBack)

{
try

{
}
catch

{ }
}
base.OnLoad(e);
}

/**//// <summary>
/// 初始化
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)

{
//动态加载css文件
HtmlLink css = new HtmlLink();
css.Attributes.Add("type", "text/css");
css.Attributes.Add("rel", "stylesheet");
css.Attributes.Add("href", "/js/subModal/subModal.css");
this.Header.Controls.Add(css);

base.OnInit(e);
objDataGrid = (DataGrid)this.FindControl("DataGridList");
objPager = (AspNetPager)this.FindControl("AspNetPager1");
if (objPager != null && objPager is AspNetPager)

{
this.InitAspNetPager(objPager);
}
}

/**//// <summary>
/// 重载OnPreRender方法
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)

{
Page.ClientScript.RegisterClientScriptInclude("subModalJS", "/js/subModal/submodalsource.js");
base.OnPreRender(e);
}
#endregion
}

}
其中InitAspNetPager(AspNetPager po_Pager)这个方法是初始化分页控件的属性,如PageSize页面初始记录数等,排序方面我们把它放到SortDirection这个属性中,其实也就是一个ViewState保存其状态。DataGridSortData这个方法是在触发排序事件的时候加载这个方法,改变其DataGrid的升降标志。PagerBindDate这个方法是在页面改变的时候改变分页控件的自定义文本区的显示,达到同步页面记录数的显示信息。(可以自己需要修改)
其他重载OnPreRender、OnInit方法中,我加载了subModal.css样式,和submodalsource.js脚本,是因为这里我用了
http://gabrito.com/files/subModal/这个网站上提供的代码替换弹出框。其中我修改了一个地方,
if
(callReturnFunc
==
true
)
//
主窗口上建立一个回调方法

{
document.getElementById("TextBox1").value="reload";
__doPostBack("TextBox1","")
}
我在页面上加入一个TextBox1,作为是否回发标志。这个后面会更清楚。
2、页面上面基本上用到的控件有:ScriptManager,UpdatePanel,UpdateProgress,DataGrid,AspNetPager1,TextBox1(刚才提到是否回发标志),txt_delid(删除回复标志),btnAddNew(弹出新增页面)。其中UpdatePanel定义了3个触发器AsyncPostBackTrigger,第一个是AspNetPager1分页控件了,监听事件PageChanged,第2个就是当新增页面关闭(增加成功情况)时要对父页面(当前这个页面)进行回发,用到的是TextBox1,其事件TextChanged,最后一个就是删除事件用到的txt_delid的TextChanged,因为我这个删除按钮(其实是张图片而已)放在DataGrid中的模板中,动态绑定它的onclick 事件,回发txt_delid的改变值,好让服务端删除记录后刷新局部。
好了,页面代码如下:
<%
@ Page Language="C#" AutoEventWireup="true" CodeFile="Ajax_DataGrid.aspx.cs" Inherits="Test_Ajax_DataGrid"
%>


<%
@ Register Assembly="EMEFRAME" Namespace="EMEFRAME.UIControl" TagPrefix="cc1"
%>
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head
id
="Head1"
runat
="server"
>
<
title
></
title
>

<
script
type
="text/javascript"
>
function _del(id)

{
document.getElementById("txt_delid").innerText = id;
__doPostBack("txt_delid","");
}
</
script
>

</
head
>
<
body
>
<
form
id
="form1"
runat
="server"
>
<
asp:ScriptManager
runat
="server"
ID
="sm"
>
</
asp:ScriptManager
>
<
table
width
="100%"
>
<
tr
>
<
td
align
="right"
width
="70%"
>
<
input
type
="button"
id
="btnAddNew"
value
="新 增"
runat
="server"
onclick
="initPopUp('新建');showPopWin('Test_Add.aspx', 400, 200)"
/>
</
td
>
</
tr
>
</
table
>
<
div
id
="SearchDiv"
style
="display: none;"
>
</
div
>
<
asp:UpdatePanel
ID
="UpdatePanel1"
runat
="server"
UpdateMode
="Conditional"
>
<
ContentTemplate
>
<
asp:DataGrid
ID
="DataGridList"
runat
="server"
Width
="100%"
AutoGenerateColumns
="False"
PageSize
="20"
BorderWidth
="1px"
BorderColor
="#79BCEF"
AllowSorting
="True"
OnSortCommand
="DataGridList_SortCommand"
OnItemDataBound
="DataGridList_ItemDataBound"
>
<
ItemStyle
CssClass
="dgItem"
></
ItemStyle
>
<
HeaderStyle
CssClass
="dgTitle"
></
HeaderStyle
>
<
Columns
>
<
asp:BoundColumn
DataField
="id"
HeaderText
="id"
SortExpression
="id"
></
asp:BoundColumn
>
<
asp:BoundColumn
DataField
="vTest_Name"
SortExpression
="vTest_Name"
HeaderText
="名称"
></
asp:BoundColumn
>
<
asp:BoundColumn
DataField
="VTest_Creater"
HeaderText
="创建人"
SortExpression
="VTest_Creater"
>
</
asp:BoundColumn
>
<
asp:BoundColumn
DataField
="dTest_CreateDate"
SortExpression
="dTest_CreateDate"
HeaderText
="创建时间"
DataFormatString
="{0:d}"
></
asp:BoundColumn
>
<
asp:TemplateColumn
HeaderText
="修改"
>
<
HeaderStyle
Width
="70px"
></
HeaderStyle
>
<
ItemTemplate
>
<
img
src
="../Images/EditBtn.gif"
/>
</
ItemTemplate
>
</
asp:TemplateColumn
>
<
asp:TemplateColumn
HeaderText
="删除"
>
<
HeaderStyle
Width
="50px"
></
HeaderStyle
>
<
ItemTemplate
>
<
img
src
="../Images/DeleteBtn.gif"
/>
</
ItemTemplate
>
<
EditItemTemplate
>
<
font
face
="宋体"
></
font
>
</
EditItemTemplate
>
</
asp:TemplateColumn
>
</
Columns
>
<
PagerStyle
Visible
="False"
NextPageText
="下一页"
PrevPageText
="上一页"
></
PagerStyle
>
</
asp:DataGrid
>
<
cc1:AspNetPager
ID
="AspNetPager1"
runat
="server"
OnPageChanged
="AspNetPager1_PageChanged"
PageSize
="10"
>
</
cc1:AspNetPager
>
<
div
id
="popupMask"
>
</
div
>
</
ContentTemplate
>
<
Triggers
>
<
asp:AsyncPostBackTrigger
ControlID
="AspNetPager1"
EventName
="PageChanged"
/>
<
asp:AsyncPostBackTrigger
ControlID
="TextBox1"
EventName
="TextChanged"
/>
<
asp:AsyncPostBackTrigger
ControlID
="txt_delid"
EventName
="TextChanged"
/>
</
Triggers
>
</
asp:UpdatePanel
>
<
asp:Label
ID
="lblWhere"
runat
="server"
Visible
="False"
></
asp:Label
>
<
asp:TextBox
ID
="TextBox1"
runat
="server"
OnTextChanged
="TextBox1_TextChanged"
Style
="visibility: hidden"
></
asp:TextBox
>
<
asp:UpdateProgress
ID
="uprog"
runat
="server"
DisplayAfter
="20"
>
<
ProgressTemplate
>
<
div
style
="background-color: #E2F2FF; color: Black; font-size: 11pt; left: 266px;
position: absolute; top: 200px; z-index: 3; border: solid 1px #8DD3FF; width: 263px;
height: 80px; text-align: center;"
>
<
center
>
<
br
/>
<
img
src
="../Images/blu.gif"
alt
=" "
/>
<
br
/>
数据更新中,请稍候
<
br
/>
</
center
>
</
div
>
</
ProgressTemplate
>
</
asp:UpdateProgress
>
<
asp:TextBox
ID
="txt_delid"
runat
="server"
OnTextChanged
="txt_delid_TextChanged"
Style
="visibility: hidden"
></
asp:TextBox
>
</
form
>
</
body
>
</
html
>
cs代码如下:
using
System;
using
System.Data;
using
System.Configuration;
using
System.Collections;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.HtmlControls;

using
_91dos.Components.BusApp;

public
partial
class
Test_Ajax_DataGrid : EMEFRAME.ListDataPage

{
protected void Page_Load(object sender, EventArgs e)

{
if (!Page.IsPostBack)

{
//页面权限控制
//MenuCode = "44";
//ShowHiddenControl();


/**//***********************************************************************************
初始化排序字段
***********************************************************************************/
if ((string)ViewState["SortExpression"] == null || (string)ViewState["SortExpression"] == "")

{
ViewState["SortExpression"] = "dTest_CreateDate"; //默认排序字段
ViewState["SortDirection"] = false;
}

/**//***********************************************************************************
绑定DataGrid数据
**********************************************************************************/
DataGrid_bind();
}
}
//表格数据绑定
private void DataGrid_bind()

{
int RecordCount;
DataTable dTable = _91dos_TestApp.Get_91dos_TestPage(AspNetPager1.CurrentPageIndex, AspNetPager1.PageSize, lblWhere.Text, Convert.ToBoolean(ViewState["SortDirection"]), ViewState["SortExpression"].ToString(), out RecordCount);
AspNetPager1.RecordCount = RecordCount;
DataGridList.DataSource = dTable;
DataGridList.DataBind();
PagerBindDate();
}
protected void DataGridList_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)

{
this.DataGridSortData(e);
DataGrid_bind();
}
//分页事件
protected void AspNetPager1_PageChanged(object sender, EventArgs e)

{
DataGrid_bind();
}
//页面回调刷新
protected void TextBox1_TextChanged(object sender, EventArgs e)

{
DataGrid_bind();
TextBox1.Text = "";
}
protected void DataGridList_ItemDataBound(object sender, DataGridItemEventArgs e)

{
if (e.Item.ItemIndex != -1)

{
//if (e.Item.Cells[1].Text.ToUpper().Trim() == "ADMIN")
//{
// e.Item.Cells[4].Attributes.Add("onclick", "alert(\"超级管理员不可被修改!\");");
// e.Item.Cells[5].Attributes.Add("onclick", "alert(\"超级管理员不可被删除!\");");
//}
//else
//{
e.Item.Cells[4].Attributes.Add("onclick", "initPopUp('修改信息');showPopWin('Test_Edit.aspx?id=" + e.Item.Cells[0].Text + "', 400, 200)");
e.Item.Cells[5].Attributes.Add("onclick", "if(confirm('是否要永久删除该条记录?')){_del('" + e.Item.Cells[0].Text + "');}");
//}
for (int i = 0; i < 5; i++)

{
e.Item.Cells[i].Attributes.Add("ondblclick", "initPopUp('详细信息');showPopWin('Test_Detail.aspx?id=" + e.Item.Cells[0].Text + "', 400, 200)");
}
}
}
//删除事件
protected void txt_delid_TextChanged(object sender, EventArgs e)

{
if (txt_delid.Text != "")

{
if (_91dos_TestApp._91dos_TestDelete(txt_delid.Text))

{
DataGrid_bind();
txt_delid.Text = "";
}
else

{
alert("删除出错!");
}
}
}
}