请问如何触发服务器控件的双击事件? 都看不出你到底要干什么,掌握原则:1。服务端控件到客户端后也是标准的html控件,没有什么神秘的,不过是包装一下代码而已。2。用hidden控件时,只要加入runat=server 就可以在服务端和客户端都能访问到。很方便。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢 , zhenwang(自由梦想) 我想表达的是在服务器控件上添加自己的事件,如dblClick然后在客户端能够对控件的dblClick编程,且能够在事件参数里得到引发事件的子控件的名称就行。 我这有个DataGrid的例子,你看一下。写成dll,调用。必须设置backcolorusing 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); } }} OnPreRender使用viewstate,OnLoad时再取出来 楼上的兄弟,上面的代码怎么设置backcolor,提示: ...clsGrid.cs(23): 找不到类型或命名空间名称“ColorEditor”(是否缺少 using 指令或程序集引用?) 请问怎么办? 如果不是DataGrid.OnItemDataBound,那么换成Text,那么对应的OnItemDataBound怎么写我就是找不到对应的方法。象button有OnBubbleEvent()方法。 怎么办?我被卡死这了?帮我,各位老大。 没有,html方式下面只有buttonClient event。 添加引用System.Drawing.dll;System.Drawing.Design.dll; webService 远程查询? C#如何获取url的开头 winform中的combobox如何实现字符串累加 谁有C# PDF417 编解码源代码..共享下. .net有没有开源的工作流? 异想天开的问题!高分求答 有关文件读取的,请各位高手请进,急 用ASP跟ASP.NET使用Cookies混合验证用户的问题。 C#代码如何实现域名解析? 获取远程服务器日志文本 【线程问题】:如何实现有两个线程,当一个线程运行完毕后,通知另外一个线程偶运行好了,让另外一个线程继续运行。 C#中的系统设置是不是用ini文件和Alt+Enter 的快捷健的设置
写成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);
} }
}
...clsGrid.cs(23): 找不到类型或命名空间名称“ColorEditor”(是否缺少 using 指令或程序集引用?)
请问怎么办?
怎么办?我被卡死这了?帮我,各位老大。
System.Drawing.Design.dll;