都看不出你到底要干什么,掌握原则:
1。服务端控件到客户端后也是标准的html控件,没有什么神秘的,不过是包装一下代码而已。2。用hidden控件时,只要加入runat=server 就可以在服务端和客户端都能访问到。很方便。

解决方案 »

  1.   

    谢谢 , zhenwang(自由梦想)     我想表达的是在服务器控件上添加自己的事件,如dblClick然后在客户端能够对控件的dblClick编程,且能够在事件参数里得到引发事件的子控件的名称就行。
      

  2.   

    我这有个DataGrid的例子,你看一下。
    写成dll,调用。必须设置backcolor
    using System;
    using System.Collections.Specialized;
    using System.ComponentModel;
    using System.Drawing;
    using System.Drawing.Design;
    using System.Resources;
    using System.Text;
    using System.Web.UI;
    using System.Web.UI.WebControls;namespace abc
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    public class Class1:DataGrid,IPostBackEventHandler 
    {
           //定义click事件
    /// <summary>
    /// 鼠标单击DataGrid行事件。
    /// </summary>
    [Category("外观"),Description("鼠标所在行的颜色。")]
    [Editor(typeof(ColorEditor),typeof(UITypeEditor))]
    public Color CurrentRowColor
    {
    get
    {
    object obj=ViewState["CurrentRowColor"];
    return ((null ==obj ) ? BackColor : (Color)obj);
    }
    set
    {
    ViewState["CurrentRowColor"]=value;
    }
    }
    public event DataGridItemEventHandler Click;
    /// <summary>
    /// 鼠标双击DataGrid行事件。
    /// </summary>
    public event DataGridItemEventHandler DblClick;
    protected void OnClick(int index)
    {
    if(null!=Click)
    Click(this,new DataGridItemEventArgs(Items[index]));
    }
    protected void OnDblClick(int index)
    {
    if(null!=DblClick)
    DblClick(this,new DataGridItemEventArgs(Items[index]));
    }

    public void RaisePostBackEvent(string eventArgument)
    {     
    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();
    }
    protected override void OnPreRender(EventArgs e)
    {
    Page.GetPostBackEventReference(this);
    //注册单击双击事件脚本
    Page.RegisterStartupScript(
    UniqueID+"clickScript",
    clickScript((null==Click)?false:true,(null==DblClick)?false:true));
    }
    protected override void Render(HtmlTextWriter output) 
    {     
    base.Render(output);
    }     }
    }
      

  3.   

    OnPreRender使用viewstate,OnLoad时再取出来
      

  4.   

    楼上的兄弟,上面的代码怎么设置backcolor,提示:
     ...clsGrid.cs(23): 找不到类型或命名空间名称“ColorEditor”(是否缺少 using 指令或程序集引用?)
      请问怎么办?
      

  5.   

    如果不是DataGrid.OnItemDataBound,那么换成Text,那么对应的OnItemDataBound怎么写我就是找不到对应的方法。象button有OnBubbleEvent()方法。
       怎么办?我被卡死这了?帮我,各位老大。
      

  6.   

    没有,html方式下面只有buttonClient event。
      

  7.   

    添加引用System.Drawing.dll;
    System.Drawing.Design.dll;