《谁有定制的DataGrid控件的源代码?共享一下,研究研究!》

junmingl 2003-06-12 05:03:09
如题!
...全文
32 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lqdmafeng 2003-06-24
  • 打赏
  • 举报
回复
Thanks
tix66 2003-06-17
  • 打赏
  • 举报
回复
/// <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)
{
sbScript.Append("if(1=="+UniqueID+"_scrolled) return;")
.Append("var "+UniqueID+"_currentPos="
+UniqueID+"_sp.scrollTop;")
//滚动发生了吗?
.Append(
"if("+UniqueID+"_currentPos!="+UniqueID+"_scrollPos)")
.Append("{")
.Append(UniqueID+"_rTop.style.height=0;")
.Append(UniqueID+"_rFoot.style.height=0;")
//滚动事件标志为已触发
.Append(UniqueID+"_scrolled=1;")
.Append(
"if("+UniqueID+"_currentPos>"+UniqueID+"_scrollPos)")
.Append("{")
//提交向下滚动事件
.Append(
Page.GetPostBackEventReference(this,"scroll2foot")+";")
.Append("}")
.Append("else{")
//提交向上滚动事件
.Append(
Page.GetPostBackEventReference(this,"scroll2top")+";")
.Append("}")
.Append("}");
}
sbScript.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));
if("SCROLLMODE"==DisplayMode.ToUpper())
{
//注册滚动表描述脚本
Page.RegisterStartupScript(
UniqueID+"scrollTableScript",
scrollTableScript(AllowPaging));
//注册滚动事件脚本
Page.RegisterStartupScript(
UniqueID+"scrollEventScript",
scrollEventScript(AllowPaging));
}
}

protected override void Render(HtmlTextWriter output)
{
//通过属性DisplayMode判断DataGrid的呈现模式
if("SCROLLMODE"==DisplayMode.ToUpper())
{
//画容器(用来容纳datagrid)
output.Write(
"<div id='"+UniqueID+"_sp' "
+"style='OVERFLOW: auto; "
+"WIDTH:"+FrameWidth.Value.ToString()+"; "
//Style没有索引器,
//所以我没能把所有样式复制过来
//哪位大侠能帮我
+"LEFT:"+Style["LEFT"]+"; "
+"TOP:"+Style["TOP"]+"; "
+"POSITION:"+Style["POSITION"]+"; "
+"Z-INDEX:"+Style["Z-INDEX"]+"; "
+"' "
//这个onscroll不用try/catch包起来
//就会报错
//为什么会这样?
//+"onscroll='"+UniqueID+"_scroll()'>");
+"onscroll='try{"+UniqueID+"_scroll()}catch(e){}'>");
//画滚动表
output.Write(
"<table id='"+UniqueID+"_table' "
+"style='WIDTH:"+FrameWidth.Value.ToString()+"; "
+"'>");
//画滚动表上沿
output.Write(
"<tr id='"+UniqueID+"_rTop' "
+"style='HEIGHT:0; WIDTH:"+FrameWidth.Value.ToString()
+"'><td/></tr>");
//datagrid所在位置
output.Write(
"<tr id='"+UniqueID+"_rDG' "
+"style='WIDTH:"+FrameWidth.Value.ToString()
+"'><td>");
//清理datagrid原有属性
Style["LEFT"]="0";
Style["TOP"]="0";
Style["POSITION"]="relative";
PagerStyle.Visible=false;
//输出datagrid
base.Render(output);
output.Write("</td></tr>");
//画滚动表下沿
output.Write(
"<tr id='"+UniqueID+"_rFoot' "
+"style='HEIGHT:0; WIDTH:"+FrameWidth.Value.ToString()
+"'><td/></tr></table>");
//画容器结束
output.Write("</div>");
}
else
{
//只输出datagrid
base.Render(output);
}
}
#region 属性DisplayMode的类型转化器
/// <summary>
/// 属性DisplayMode的类型转化器,
/// 以不可编辑的下拉列表形式提供标准值。
/// </summary>
public class modeConverter:TypeConverter
{
public modeConverter(){}
/// <summary>
/// 存储要提供的所有标准值。
/// </summary>
private static StandardValuesCollection _modeList;
/// <summary>
/// 获取标准值。
/// </summary>
/// <returns>
/// 标准值。
/// </returns>
private StandardValuesCollection getModeList()
{
if(null==_modeList)
{
string[] mode=new string[]{"OriginalMode","ScrollMode"};
_modeList=new StandardValuesCollection(mode);
}
return _modeList;
}
/// <summary></summary>
/// <param name="context"></param>
/// <returns>
/// 返回true,表示提供标准值。
/// </returns>
public override bool
GetStandardValuesSupported(ITypeDescriptorContext context)
{return true;}
/// <summary></summary>
/// <param name="context"></param>
/// <returns>
/// 返回true,
/// 表示标准值只能通过下拉列表选择。
/// </returns>
public override bool
GetStandardValuesExclusive(ITypeDescriptorContext context)
{return true;}
/// <summary>
/// 返回要在下拉列表中提供的标准值。
/// </summary>
/// <param name="context"></param>
/// <returns>
/// 在下拉列表中提供的标准值。
/// </returns>
public override StandardValuesCollection
GetStandardValues(ITypeDescriptorContext context)
{
return getModeList();
}
}
#endregion
}
}

tix66 2003-06-17
  • 打赏
  • 举报
回复
/// <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();
}
/// <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();
}
TimCheng 2003-06-16
  • 打赏
  • 举报
回复
I want too.please mail one to me: xlcheng2000@sina.com.cn
fcy3507 2003-06-16
  • 打赏
  • 举报
回复
fcy3507@163.com
ocool 2003-06-16
  • 打赏
  • 举报
回复
allenjiang@163.net
liuzhonghe 2003-06-16
  • 打赏
  • 举报
回复
up
haoyufu 2003-06-14
  • 打赏
  • 举报
回复
谁能把asp.net中的播放音乐空间类出来呀
junmingl 2003-06-13
  • 打赏
  • 举报
回复
请发到我的邮箱:jim_dawson@163.com
谢谢!
liguiman 2003-06-13
  • 打赏
  • 举报
回复
i have
but how can i give you ?
junmingl 2003-06-13
  • 打赏
  • 举报
回复
没人知道么?帮帮忙啊!!
qiweiyong 2003-06-12
  • 打赏
  • 举报
回复
偶也想要,帮你up一下先。
junmingl 2003-06-12
  • 打赏
  • 举报
回复
c#版!!!

62,075

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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

试试用AI创作助手写篇文章吧