下面是我的系程序里一个页面上的datagrid中的ItemDataBound 事件,功能就是每一行都加上个双击事件,并且是鼠标移到上面就变成 手型!
private void Dg_Teacher_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{

if (e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
{ e.Item.Attributes.Add("ondblclick","__doPostBack('Dg_Teacher$_ctl"+(e.Item.ItemIndex+3)+"$_ctl0','')");
e.Item.Attributes.Add("style","cursor:hand;");
//Page.Response.Write("<script>alert('命中');</script>");
}
}我现在好几个页面上的datagrid  都是上面的做法其中一个页面一切正常
但是其它的所有页面上的datagrid就出问题了, 第一次数据绑定的时候运行了上面的事件,在页面的源文件里也看到了ondblclick事件,但是重新绑定一下数据  前一次选中的行就没有那个ondblclick了,鼠标移动上面也不见变成 手型 了 , 别的行都还可以,就是上次选中过的行就不行了! 好几个类似的页面, 只有一个页面,怎么选择都正常,其它的都是上一次选择过的下次就选择不了, 鼠标移动上面也不变 手型  了,在源文件里看了,就那一行 少了一些东西, 正常的话应该是有这些:ondblclick="__doPostBack('Dg_Signupsheet$_ctl7$_ctl0','')" style="font-size:X-Small;height:16px;cursor:hand;">但是实际上上次选择的,如果数据重新绑定了,那一行就少了上面的代码现在就是搞不清楚怎么会少了!

解决方案 »

  1.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=C83C3A4B-8571-4CE6-FBAC-35DC28D14389
      

  2.   

    if (e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
    当e.Item.ItemType为选中的时候怎么办呢?也就是 e.Item.ItemType == ListItemType.SelectItem 的时候
      

  3.   

    try to do it inside ItemCreated event handler, also don't use stuffs like__doPostBack('Dg_Teacher$_ctl"+(e.Item.ItemIndex+3)+"$_ctl0'try something likeif (e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
    {
      e.Item.Attributes.Add("ondblclick",Page.GetPostBackEventReference(e.Item));
      e.Item.Attributes.Add("style","cursor:hand;");
    }
      

  4.   

    可能是返回页面或者创建事件的问题。
    可以按楼上在ItemCreated事件里加属性添加的代码。
      

  5.   

    saucer(思归)大哥 的办法是正确的
    在ItemDataBount事件中添加saucer(思归)大哥的方法
    在数据绑定的时候就执行设置你所要的属性
      

  6.   

    另外:GetPostBackEventReference(e.Item), 用这个跟用"__doPostBack('Dg_Teacher$_ctl"+(e.Item.ItemIndex+3)+"$_ctl0','')"  这个区别?  GetPostBackEventReference(e.Item),  这个用法的优点是什么啊?