微软本身的datagrid是不行了,找些别人做好的增强版的datagrid有支持双击事件的

解决方案 »

  1.   

    标准的datagrid没有这个功能,只能实现单击事件。
      

  2.   

    foreach(DataGridItem item in grd1.Items )
    {
    item.Attributes.Add("ondblclick","这边换成你想做的代码。你可以弟交到服务器,再做处理");
    }
      

  3.   

    foreach(DataGridItem item in grd1.Items )
    {
    item.Attributes.Add("ondblclick","这边换成你想做的代码。你可以弟交到服务器,再做处理");
    }
      

  4.   

    接上:
    protected void OnScroll2Foot()
        {
          if(null!=Scroll2Foot)
            Scroll2Foot(this,new EventArgs());
        }
        protected void OnScroll2Top()
        {
          if(null!=Scroll2Top)
            Scroll2Top(this,new EventArgs());
        }
        // private bool LoadPostData
        // (string postDataKey,NameValueCollection postData)
        // {
        // string PostedValue=postData[postDataKey];
        // if(null==PostedValue)
        // {
        // return true;
        // }
        // return false;
        // }
        /// <summary>
        /// 通过eventArgument触发相应事件。
        /// </summary>
        /// <param name="eventArgument">
        /// SCROLL2TOP:向上滚动事件,
        /// SCROLL2FOOT:向下滚动事件,
        /// CLK前缀:单击事件(此时后缀为触发的行号,从0开始),
        /// DBL前缀:双击事件(此时后缀为触发的行号,从0开始)。
        /// </param>
        public void RaisePostBackEvent(string eventArgument)
        {
          if("SCROLLMODE"==DisplayMode.ToUpper())
          {
            if("SCROLL2TOP"==eventArgument.ToUpper())
            {
              OnScroll2Top();
              return;
            }
            if("SCROLL2FOOT"==eventArgument.ToUpper())
            {
              OnScroll2Foot();
              return;
            }
          }
          if(eventArgument.StartsWith("CLK"))
          {
            eventArgument=
              eventArgument.TrimStart(new Char[]{'C','L','K'});
            OnClick(Convert.ToInt32(eventArgument));
            return;
          }
          if(eventArgument.StartsWith("DBL"))
          {
            eventArgument=
              eventArgument.TrimStart(new Char[]{'D','B','L'});
            OnDblClick(Convert.ToInt32(eventArgument));
            return;
          }
        }
        protected override void OnItemDataBound(DataGridItemEventArgs e)
        {
          base.OnItemDataBound(e);
          if((ListItemType.Pager==e.Item.ItemType)||
            (ListItemType.Footer==e.Item.ItemType))
          {
            return;
          }
          if(ListItemType.Header!=e.Item.ItemType)
          {
            e.Item.Attributes["id"]=
              e.Item.ItemType.ToString()+e.Item.ItemIndex.ToString();
            e.Item.Attributes["OnMouseOut"]=
              "javascript:bgColor='"+BackColor.Name.ToString()+"';";
            e.Item.Attributes["OnMouseOver"]=
              "javascript:bgColor='"+CurrentRowColor.Name.ToString()+"';";
            //添加客户端双击行事件
            e.Item.Attributes["OnDblClick"]=
              "javascript:"+UniqueID+"_dbl("+e.Item.ItemIndex.ToString()+");";
            //添加客户端单击行事件
            e.Item.Attributes["OnClick"]=
              "javascript:"+UniqueID+"_clk("+e.Item.ItemIndex.ToString()+");";
          }
          else
          {
            int cellCount=e.Item.Cells.Count; 
            for(int index=0;index<cellCount;index++)
            {
              e.Item.Cells[index].Attributes["id"]=
                "HEADER"+index.ToString();
            }
          }
        }*******************************************************************************************************
    /// <summary>
        /// 单击双击脚本。
        /// </summary>
        /// <param name="canClick">
        /// 是否允许提交DataGrid单击行事件。
        /// </param>
        /// <param name="canDblClick">
        /// 是否允许提交DataGrid双击行事件。
        /// </param>
        /// <returns>
        /// 处理设置DataGrid单击双击行事件的javascript脚本。
        /// </returns>
        private string clickScript(bool canClick,bool canDblClick)
        {
          StringBuilder sbScript=new StringBuilder();
          sbScript.Append("<script language='javascript'>")//;
            //单击标志
            .Append(
            "var "+UniqueID+"_click=0;")
            //双击标志
            .Append(
            "var "+UniqueID+"_dblclick=0;")
            //被单击或双击的行标志
            .Append(
            "var "+UniqueID+"_row;")
            //单击事件
            .Append(
            "function "+UniqueID+"_clk(row)")
            .Append("{")
            .Append(
            "if((\"TD\"==event.srcElement.tagName)||(\"TR\"==event.srcElement.tagName))")
            .Append("{")
            .Append(UniqueID+"_click++;")
            .Append(UniqueID+"_row=row;")
            .Append(
            "setTimeout('"+UniqueID+"_submit()',300)")
            .Append("}")
            .Append("}")
            //双击事件
            .Append(
            "function "+UniqueID+"_dbl(row)")
            .Append("{")
            .Append(
            "if((\"TD\"==event.srcElement.tagName)||(\"TR\"==event.srcElement.tagName))")
            .Append("{")
            .Append(UniqueID+"_dblclick++;")
            .Append(UniqueID+"_row=row;")
            .Append("}")
            .Append("}")
            //提交单双击事件
            .Append(
            "function "+UniqueID+"_submit()")
            .Append("{")
            .Append(
            "if((1=="+UniqueID+"_click)&&(1=="+UniqueID+"_dblclick))")
            .Append("{");
          if(true==canDblClick)
          {
            sbScript.Append(
              "__doPostBack('"+UniqueID+"','DBL'+"+UniqueID+"_row);");
          }
          sbScript.Append("}")
            .Append("else {");
          if(true==canClick)
          {
            sbScript.Append(
              "__doPostBack('"+UniqueID+"','CLK'+"+UniqueID+"_row);");
          }
          sbScript.Append("}")
            //单击标志复位
            .Append(
            UniqueID+"_click=0;")
            //双击标志复位
            .Append(
            UniqueID+"_dblclick=0;")
            .Append("}")
            .Append("</script>");
          return sbScript.ToString();
        }
      

  5.   

    接上:
      /// <summary>
        /// 滚动表脚本。
        /// </summary>
        /// <param name="canScroll">
        /// 是否允许DataGrid显示滚动条。
        /// </param>
        /// <returns>
        /// 描述滚动表的javascript脚本。
        /// </returns>
        private string scrollTableScript(bool canScroll)
        {
          StringBuilder sbScript=new StringBuilder();
          sbScript.Append("<script language='javascript'>");
          if(true==canScroll)
          {
            //保存datagrid高度
            sbScript.Append(
              "var "+UniqueID+"_dgHeight="
              +UniqueID+"_sp.scrollHeight;")
              //滚动表上沿高度
              .Append(
              UniqueID+"_rTop.style.height="
              +CurrentPageIndex+"*"+UniqueID+"_dgHeight;");
            //滚动表下沿高度
            if(0==PageCount)
            {
              sbScript.Append(
                UniqueID+"_rFoot.style.height=0;");
            }
            else
            {
              sbScript.Append(
                UniqueID+"_rFoot.style.height="
                +"("+PageCount+"-"+CurrentPageIndex+"-1)*"+UniqueID+"_dgHeight;");
            }
            //容器高度
            sbScript.Append(
              UniqueID+"_sp.style.height="
              +UniqueID+"_dgHeight+20;");
            //滚动条位置
            if(PageCount==CurrentPageIndex+1)
            {
              sbScript.Append(
                UniqueID+"_sp.scrollTop="
                +"100+"+UniqueID+"_dgHeight*"+CurrentPageIndex+";");
            }
            else
            {
              sbScript.Append(
                UniqueID+"_sp.scrollTop="
                +UniqueID+"_dgHeight*"+CurrentPageIndex+";");
            }
            //保存滚动条位置
            sbScript.Append(
              "var "+UniqueID+"_scrollPos="+UniqueID+"_sp.scrollTop;")
              //滚动事件标志为未触发
              .Append("var "+UniqueID+"_scrolled=0;");
          }
          else
          {
            //未分页,不显示垂直滚动条
            sbScript.Append(
              UniqueID+"_sp.style.height="
              +UniqueID+"_sp.scrollHeight+20;");
          }
          sbScript.Append("</script>");
          return sbScript.ToString();
        }
        /// <summary>
        /// 滚动事件脚本。
        /// </summary>
        /// <param name="canScroll">
        /// 是否允许DataGrid显示滚动条。
        /// </param>
        /// <returns>
        /// 滚动事件的javascript脚本。
        /// </returns>
        private string scrollEventScript(bool canScroll)
        {
          StringBuilder sbScript=new StringBuilder();
          //处理滚动事件
          sbScript.Append("<script language='javascript'>")
            .Append("function "+UniqueID+"_scroll()")
            .Append("{");
          if(true==canScroll)
          {
      

  6.   

    to napsoft:
    能不能发这代码到
    非常感谢。
      

  7.   

    to chnking:
    请问在那里有增强版的datagrid下载,
    非常感谢。
      

  8.   

    http://www.codeproject.com/aspnet/masterdetailgrid/masterdetailgrid_src.zip
    http://xml.sz.luohuedu.net/xml/Content.asp 
    http://aspalliance.com/Colt/Articles/Article3.aspx
      

  9.   

    public void RaisePostBackEvent(string eventArgument)
        {
          if("SCROLLMODE"==DisplayMode.ToUpper())
          {
            if("SCROLL2TOP"==eventArgument.ToUpper())
            {
              OnScroll2Top();
              return;
            }
            if("SCROLL2FOOT"==eventArgument.ToUpper())
            {
              OnScroll2Foot();
              return;
            }
          }
          if(eventArgument.StartsWith("CLK"))
          {
            eventArgument=
              eventArgument.TrimStart(new Char[]{'C','L','K'});
            OnClick(Convert.ToInt32(eventArgument));
            return;
          }
          if(eventArgument.StartsWith("DBL"))
          {
            eventArgument=
              eventArgument.TrimStart(new Char[]{'D','B','L'});
            OnDblClick(Convert.ToInt32(eventArgument));
            return;
          }
        }
        protected override void OnItemDataBound(DataGridItemEventArgs e)
        {
          base.OnItemDataBound(e);
          if((ListItemType.Pager==e.Item.ItemType)||
            (ListItemType.Footer==e.Item.ItemType))
          {
            return;
          }
          if(ListItemType.Header!=e.Item.ItemType)
          {
            e.Item.Attributes["id"]=
              e.Item.ItemType.ToString()+e.Item.ItemIndex.ToString();
            e.Item.Attributes["OnMouseOut"]=
              "javascript:bgColor='"+BackColor.Name.ToString()+"';";
            e.Item.Attributes["OnMouseOver"]=
              "javascript:bgColor='"+CurrentRowColor.Name.ToString()+"';";
            //添加客户端双击行事件
            e.Item.Attributes["OnDblClick"]=
              "javascript:"+UniqueID+"_dbl("+e.Item.ItemIndex.ToString()+");";
            //添加客户端单击行事件
            e.Item.Attributes["OnClick"]=
              "javascript:"+UniqueID+"_clk("+e.Item.ItemIndex.ToString()+");";
          }
          else
          {
            int cellCount=e.Item.Cells.Count; 
            for(int index=0;index<cellCount;index++)
            {
              e.Item.Cells[index].Attributes["id"]=
                "HEADER"+index.ToString();
            }
          }
        }
      

  10.   

    其实不难 ^_^
    Private Sub DataGrid1_ItemCreated(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles Datagrid1.ItemCreated
            Dim selectindex As Integer
            selectindex = e.Item.ItemIndex
            e.Item.Attributes("OndblClick") = "dgDblClick(" & selectindex & ")" '--or yours params
            e.Item.Attributes("style") = "cursor:hand"
            e.Item.Attributes("OnClick") = "dgClick(" & selectindex & ")"
      End Sub