使用Linkbutton、C#和javascript在数据列表中隐藏面板

使用Linkbutton、C#和javascript在数据列表中隐藏面板,c#,javascript,hide,panel,datalist,C#,Javascript,Hide,Panel,Datalist,我是一个新的程序员,所以任何帮助或建议将不胜感激 我有一个数据列表,其中包含一个显示一行数据的链接按钮。单击linkbutton时,应取消隐藏包含数据列表(也包含linkbutton)的面板,该面板显示更详细的信息。我遇到的问题是,当我单击summary linkbutton时,它不会启动javascript来隐藏或显示details面板。我没有得到任何异常,我的程序构建和运行,所以我不知道为什么javascript不会启动。仅供参考,DBClass和DBClass对象是内部类,它们工作正常。这

我是一个新的程序员,所以任何帮助或建议将不胜感激

我有一个数据列表,其中包含一个显示一行数据的链接按钮。单击linkbutton时,应取消隐藏包含数据列表(也包含linkbutton)的面板,该面板显示更详细的信息。我遇到的问题是,当我单击summary linkbutton时,它不会启动javascript来隐藏或显示details面板。我没有得到任何异常,我的程序构建和运行,所以我不知道为什么javascript不会启动。仅供参考,DBClass和DBClass对象是内部类,它们工作正常。这是我的密码:

using System;
usingSystem.Collections;
usingSystem.Configuration;
usingSystem.Data;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Xml.Linq;
usingDBClass;


namespaceTimeLogging.pages
{
  publicpartialclassdbEntry:System.Web.UI.Page
  {
    QueryClassqc=newQueryClass();

  protectedvoidPage_Load(objectsender,EventArgse)
  {
    bindDlReportProjSum_devSummary();
  }

  //getsthelinkbuttonattributefortheemployeeidsothatitcanbeboundtothedatalist
protectedvoiddlReportProjSum_devSummary_OnItemDataBound(objectsender,DataListItemEventArgse)
{
  if(e.Item.ItemType == ListItemType.Item 
    || e.Item.ItemType == ListItemType.AlternatingItem)
  {
    DataListnestedDataList=(DataList)e.Item.FindControl("dlReportProjSum_devDetail");
    LinkButtonlinkbtn=(LinkButton)e.Item.FindControl("lbReportProjSum_devSummary");
    bindDlReportProjSum_devDetail(nestedDataList,linkbtn.Attributes["empid"]);
    //Panelpan=(Panel)e.Item.FindControl("panReportProjSum_devDetail");
  }
}

//hidesthedevedetailpanelonlinkbutttonclick
protectedvoiddlReportProjSum_devSummary_OnItemCommand(objectsender,DataListCommandEventArgse){

LinkButtonlb=(LinkButton)e.Item.FindControl("lbReportProjSum_devSummary");
Panelpan=(Panel)e.Item.FindControl("panReportProjSum_devDetail");
}

//thedatalistthatshowsasummaryofeachemployeewhohasworkedonaproject
protectedvoidbindDlReportProjSum_devSummary(){
DbClassdb=newDbClass();
DataTabledt=newDataTable();
stringsqlString=@"selectname,empid,sum(actualtime)astotal
fromTime_logging_vwProjDevDetail
whereprojid=1
groupbyempid,name";
db.OpenConnection();
db.Execute(sqlString);
dt=db.GetData.Table;
dlReportProjSum_devSummary.DataSource=dt;
dlReportProjSum_devSummary.DataBind();
db.CloseConnection();
db.Dispose();
}



//bindthenesteddatalistinthedevSummaryOnItemDataBoundevent
privatevoidbindDlReportProjSum_devDetail(DataListdl,stringdevEmpid)
{
DbClassdb=newDbClass();
DataTabledt=newDataTable();
stringsqlString=string.Format(@"selectDAYOF,ESTTIME,ACTUALTIME,NOTES,TASK
fromtime_logging_resourceswhere
projid=1andempid={0}",devEmpid);
db.OpenConnection();
db.Execute(sqlString);
dt=db.GetData.Table;
dl.DataSource=dt;
dl.DataBind();

db.CloseConnection();
db.Dispose();
}



////whenthedeveloperssummaryoftotalhoursonaprojectisclicked
protectedvoidlbReportProjSum_devSummary_Click(objectsender,EventArgse)
{
ClientScript.RegisterStartupScript(GetType(),"Javascript","HidePanel()",true);

}

}
}

ASPXpage////////////////////////////////////////////////////////////////////////////////


<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="dbEntry.aspx.cs"Inherits="TimeLogging.pages.dbEntry"%>

<%@RegisterAssembly="AjaxControlToolkit"Namespace="AjaxControlToolkit"TagPrefix="asp"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>UntitledPage</title>
<linkhref="../css/Main.css"rel="stylesheet"type="text/css"/>

<scripttype="text/javascript"language="javascript">
functionHidePanel()
{
alert("hello");
varpanel=document.getElementById('panReportProjSum_devDetail');
if(panel.style.display=='none')
{
panel.style.display='block';
}
else
{
panel.style.display='none';
}
}
</script>

</head>
<body>
<formid="form1"runat="server">

<asp:ToolkitScriptManagerID="ToolkitScriptManager1"runat="server">
</asp:ToolkitScriptManager>
<div>
<asp:PanelID="panMainReportsHolder"runat="server">

<asp:DataListID="dlReportProjSum_devSummary"runat="server"RepeatDirection="Vertical"
ShowFooter="False"ShowHeader="False"OnItemDataBound="dlReportProjSum_devSummary_OnItemDataBound"
OnItemCommand="dlReportProjSum_devSummary_OnItemCommand">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<div>
<asp:LinkButtonID="lbReportProjSum_devSummary"OnClick="lbReportProjSum_devSummary_Click"
runat="server"empid='<%#DataBinder.Eval(Container.DataItem,"empid")%>'name='<%#DataBinder.Eval(Container.DataItem,"name")%>'
total='<%#DataBinder.Eval(Container.DataItem,"total")%>'CssClass="developerSummaryLinkButton"><%#DataBinder.Eval(Container.DataItem,"name")%>'stotalhoursspentdevelopingtheproject:<%#DataBinder.Eval(Container.DataItem,"total")%>

</asp:LinkButton>

<asp:PanelID="panReportProjSum_devDetail"runat="server">

<asp:DataListID="dlReportProjSum_devDetail"runat="server"RepeatDirection="Vertical"
ShowFooter="False"ShowHeader="False">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<div>
<asp:LinkButtonID="LinkButton1"CssClass="developerDetailLinkButton"runat="server"
Enabled="false">Dateworked:<%#DataBinder.Eval(Container.DataItem,"dayof")%>task:<%#DataBinder.Eval(Container.DataItem,"task")%>numberofhoursworked:<%#DataBinder.Eval(Container.DataItem,"actualtime")%>anynotes:<%#DataBinder.Eval(Container.DataItem,"notes")%>
</asp:LinkButton>
</div>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:DataList>
</asp:Panel>


</div>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:DataList>
</asp:Panel>
</div>
</form>
</body>
</html>
使用系统;
使用系统。收藏;
使用系统配置;
使用系统数据;
使用System.Linq;
使用System.Web;
使用System.Web.Security;
使用system.Web.UI;
使用system.Web.UI.HtmlControls;
使用System.Web.UI.WebControl;
使用System.Web.UI.WebControl.WebParts;
使用system.Xml.Linq;
使用dbclass;
namespaceTimeLogging.pages
{
publicpartialclassdbEntry:System.Web.UI.Page
{
QueryClassqc=newQueryClass();
protectedvoidPage_加载(objectsender,EventArgse)
{
bindDlReportProjSum_devSummary();
}
//获取链接按钮属性,该属性适用于所有受约束的员工
ProtectedVoidlReportProjsum_devSummary_OnItemDataBound(objectsender,DataListItemEventArgse)
{
如果(e.Item.ItemType==ListItemType.Item
||e.Item.ItemType==ListItemType.AlternatingItem)
{
DataListnestedDataList=(DataList)e.Item.FindControl(“dlReportProjSum_devDetail”);
LinkButtonlinkbtn=(LinkButton)e.Item.FindControl(“lbReportProjSum_devSummary”);
bindDlReportProjSum_devDetail(nestedDataList,linkbtn.Attributes[“empid]”);
//Panelpan=(Panel)e.Item.FindControl(“panReportProjSum_devDetail”);
}
}
//隐藏DeveDetailPanel OnlinkButton单击
ProtectedVoidlReportProjsum_devSummary_OnItemCommand(objectsender,DataListCommandEventArgse){
LinkButtonlb=(LinkButton)e.Item.FindControl(“lbReportProjSum_devSummary”);
Panelpan=(Panel)e.Item.FindControl(“panReportProjSum_devDetail”);
}
//显示每个参与该项目的员工摘要的资料
protectedvoidbindDlReportProjSum_devSummary(){
DbClassdb=newDbClass();
DataTabledt=newDataTable();
stringsqlString=@“选择名称、empid、总和(实际时间)astotal
fromTime\u logging\u vwProjDevDetail
其中projid=1
groupbyempid,name”;
db.OpenConnection();
Execute(sqlString);
dt=db.GetData.Table;
dlReportProjSum_devSummary.DataSource=dt;
dlReportProjSum_devSummary.DataBind();
db.CloseConnection();
db.Dispose();
}
//BindthenestedDataStalitheDevSummaryOnItemDataBoundEvent
privatevoidbindDlReportProjSum_devDetail(DataListdl,stringdevEmpid)
{
DbClassdb=newDbClass();
DataTabledt=newDataTable();
stringsqlString=string.Format(@“selectDAYOF、ESTTIME、ACTUALTIME、NOTES、TASK
fromtime\u logging\u Resources此处
projid=1和mpid={0},devEmpid);
db.OpenConnection();
Execute(sqlString);
dt=db.GetData.Table;
dl.DataSource=dt;
dl.DataBind();
db.CloseConnection();
db.Dispose();
}
////当开发者总结整个项目时
protectedvoidlbReportProjSum\u devSummary\u单击(objectsender,EventArgse)
{
RegisterStartupScript(GetType(),“Javascript”,“HidePanel()”,true);
}
}
}
ASPXpage////////////////////////////////////////////////////////////////////////////////
无标签
functionHidePanel()
{
警惕(“你好”);
varpanel=document.getElementById('panReportProjSum_devDetail');
if(panel.style.display=='none')
{
panel.style.display='block';
}
其他的
{
panel.style.display='none';
}
}
“开发项目的总时间:
工作日期:任务:工作小时数:任何备注:

您需要连接Linkbutton1以触发Javascript事件。可以使用OnClientClick属性执行此操作,如下所示:

<asp:LinkButtonID="LinkButton1"CssClass="developerDetailLinkButton"runat="server" Enabled="false" onclientclick="HidePanel();return false;"/>

谢谢您的回复,John MC。我尝试了一下,它确实激发了我的javascript。现在的问题是JavaScript找不到panel对象。面板位于数据列表中,我认为对javascript的调用必须来自后面的代码,因为面板只能在数据列表绑定之前和绑定期间访问。我需要找出linkbutton的“onick”事件没有触发JavaScript的原因,但我不太了解页面和控件的生命周期,无法调试它。根据.NET版本和其他设置,“panReportProjSum_devDetail”可能不是您需要使用的客户端ID(早期版本的.NET在id之前添加了类似“ct100_”的内容,以帮助避免命名冲突)。相反,在HidePanel()函数中,您可能希望尝试以下操作:varpanel=document.getElementById(“”);为什么需要Javascript来隐藏面板?是否可以在加载页面时执行此操作(PreRender事件)?您可以在代码隐藏中以编程方式设置style=display:none。不要使用Visible=false