关于在DataGrid中双击所选中的行响应事件,请各位大侠帮忙

dho 2003-07-30 02:51:56
我在做一个查询页面,想只要在DataGrid 中双击选中的行就可以反回所查询的值。
现在问题是:DataGrid中没有双击事件。但我看到别人的程序中实现了这个问题。
所以请各位大哥指点一下,在下感激不尽。
...全文
59 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
eattiger 2003-08-01
  • 打赏
  • 举报
回复
关注中
DoAll 2003-07-30
  • 打赏
  • 举报
回复
其实不难 ^_^
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
goody9807 2003-07-30
  • 打赏
  • 举报
回复
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();
}
}
}
goody9807 2003-07-30
  • 打赏
  • 举报
回复
http://www.codeproject.com/aspnet/masterdetailgrid/masterdetailgrid_src.zip
http://xml.sz.luohuedu.net/xml/Content.asp
http://aspalliance.com/Colt/Articles/Article3.aspx
dho 2003-07-30
  • 打赏
  • 举报
回复
to chnking:
请问在那里有增强版的datagrid下载,
非常感谢。
dho 2003-07-30
  • 打赏
  • 举报
回复
to napsoft:
能不能发这代码到我的邮箱:denhaiou@hotmail.com
非常感谢。
流梓 2003-07-30
  • 打赏
  • 举报
回复
接上:
/// <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)
{
流梓 2003-07-30
  • 打赏
  • 举报
回复
接上:
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();
}
greystar 2003-07-30
  • 打赏
  • 举报
回复
foreach(DataGridItem item in grd1.Items )
{
item.Attributes.Add("ondblclick","这边换成你想做的代码。你可以弟交到服务器,再做处理");
}
greystar 2003-07-30
  • 打赏
  • 举报
回复
foreach(DataGridItem item in grd1.Items )
{
item.Attributes.Add("ondblclick","这边换成你想做的代码。你可以弟交到服务器,再做处理");
}
liuzhonghe 2003-07-30
  • 打赏
  • 举报
回复
标准的datagrid没有这个功能,只能实现单击事件。
chnking 2003-07-30
  • 打赏
  • 举报
回复
微软本身的datagrid是不行了,找些别人做好的增强版的datagrid有支持双击事件的
相关推荐
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2003-07-30 02:51
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。