2014-01-22 36 views
1

我使用ModalPopupExtender今天而已,所以我没有太多的想法它是如何工作不显示DetailsView控件在ModalPopupExtender

我陷在这里的问题

我有GridView的显示所有学生的数据,现在当我点击在GridView中的特定学生的Linkbutton比那个学生的数据应该显示在弹出的Detailsview上

我在DetailsView中得到了一个详细的学生数据,但它没有在弹出窗口中显示,我是否应该在这里添加其他任何东西?

这里是我的代码modelpopupextender

ASPX代码 -

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
       <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="Stu_id" onselectedindexchanged="GridView1_SelectedIndexChanged"> 
       <Columns> 
        <asp:TemplateField HeaderText="ID"> 
         <EditItemTemplate> 
          <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Stu_id") %>'></asp:TextBox> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label1" runat="server" Text='<%# Bind("Stu_id") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
          <asp:BoundField DataField="Fullname" HeaderText="name" /> 
          <asp:BoundField DataField="Username" HeaderText="Username" /> 
          <asp:BoundField DataField="Email" HeaderText="Email" /> 
          <asp:TemplateField ShowHeader="False"> 
         <ItemTemplate> 
          <asp:LinkButton ID="btnviewdetails" runat="server" CausesValidation="false" 
           CommandName="Select" Text="select" CommandArgument='<%# Eval("Stu_id") %>' 
           onclick="LinkButton1_Click"></asp:LinkButton> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
<asp:Button ID="btnshowpopup" runat="server"/> 
     <asp:ModalPopupExtender ID="mdlpopup" runat="server" TargetControlID="btnshowpopup" PopupControlID="pnlpopup" CancelControlID="btncancel" BackgroundCssClass="pop"> 
     </asp:ModalPopupExtender> 

    <asp:Panel ID="pnlpopup" runat="server" Width="500px" style="display:none"> 
     <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> 
      <ContentTemplate> 



       <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="Stu_id" Height="50px" Width="125px"> 
         <Fields> 
           <asp:BoundField DataField="Stu_id" HeaderText="ID" /> 
           <asp:BoundField DataField="Fullname" HeaderText="Fullname" /> 
           <asp:BoundField DataField="Username" HeaderText="Username" /> 
           <asp:BoundField DataField="Email" HeaderText="Email" /> 
         </Fields> 
       </asp:DetailsView> 
        <div id="div1" style="display:none">      
         <asp:Button ID="btncancel" runat="server" Text="cancel" /> 
       </div> 
      </ContentTemplate> 
     </asp:UpdatePanel>    
    </asp:Panel> 

CS代码 -

public partial class Admin_Default : System.Web.UI.Page 


{ 
    portalDal dal = new portalDal(); 
    adminBal bal = new adminBal(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      GridView1.DataSource = bal.student_bind(); 
      GridView1.DataBind(); 
     } 
    } 
    protected void LinkButton1_Click(object sender, EventArgs e) 
    { 

    } 
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 

    this.DetailsView1.Visible = true; 
    LinkButton l1 = (LinkButton)sender; 
    dal.stu_id = Convert.ToInt16(l1.CommandArgument); 
    DetailsView1.DataSource = bal.select_student(dal); 
    DetailsView1.DataBind(); 
    this.UpdatePanel2.Update(); 
    this.mdlpopup.Show(); 

} 

BAL文件 -

public DataTable student_bind() 
    { 
     con.Open(); 
     cmd = new SqlCommand("select * from Stu_registration", con); 
     DataTable dt = new DataTable(); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     da.Fill(dt); 
     con.Close(); 
     return dt; 
    } 

    public DataTable aselect_student(portalDal dal) 
    { 
     con.Open(); 
     cmd = new SqlCommand("select_student", con); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@Stu_id", dal.stu_id); 
     DataTable dt = new DataTable(); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     da.Fill(dt); 
     con.Close(); 
     return dt; 
    } 

回答

0

我一些意见:

  • 您需要将ModalPopupExtender控件移出用于模态弹出窗口(pnlpopup,在您的情况下)的Panel。
  • 一旦你这样做了,你需要将你的CancelControlID改为UpdatePanel2$btncancel(否则你的ModalPopupExtender将无法在该UpdatePanel中找到“btncancel”控件)。
  • 您还需要将模型弹出控件外部的控件移动为“TargetControlID”(在您的情况下为btnshowpopup)。

所以您的标记应该是这样的:

<asp:Panel ID="pnlpopup" runat="server" Width="500px" style="display:none"> 
    <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
       DataKeyNames="Stu_id" Height="50px" Width="125px"> 
       <Fields> 
        <asp:BoundField DataField="Stu_id" HeaderText="ID" /> 
        <asp:BoundField DataField="Fullname" HeaderText="Fullname" /> 
        <asp:BoundField DataField="Username" HeaderText="Username" /> 
        <asp:BoundField DataField="Email" HeaderText="Email" /> 
       </Fields> 
      </asp:DetailsView> 
      <div id="div1" style="display:none">      
       <asp:Button ID="btncancel" runat="server" Text="cancel" /> 
      </div> 
     </ContentTemplate> 
    </asp:UpdatePanel>    
</asp:Panel> 

<asp:ModalPopupExtender ID="mdlpopup" runat="server" 
    TargetControlID="btnshowpopup" PopupControlID="pnlpopup" 
    CancelControlID="UpdatePanel2$btncancel" BackgroundCssClass="pop"> 
</asp:ModalPopupExtender> 
<asp:Button ID="btnshowpopup" runat="server"/> 

我也改变了“更新”的顺序,并在你的codebaheind文件“显示”命令。我不认为这将使任何区别,但它肯定是更符合逻辑:

this.mdlpopup.Show(); 
this.UpdatePanel2.Update(); 
+0

感谢回答我的问题,但同样的问题,即使弹出没有显示出来,当我点击GridView控件LinkBut​​ton的,只显示了当点击在btnshowpopup – vikas

+0

哦,不!对不起,@vikas。你是否收到任何错误讯息?例如,JavaScript错误?此外,它是一个很长的,但你应该尝试在第一个UpdatePanel中定义GridView作为包含DetailsView的UpdatePanel的触发器。 – jadarnel27

+0

谢谢@jadarnel,但我今天早上刚刚解决它,实际上我触发了updatepanel2中的触发器作为gridview的控件ID,并在LinkBut​​ton1_Click中编写了所有GridView1_SelectedIndexChanged代码,并且按照您所说的将模型弹出移动到面板外并添加了一些标签并且它工作正常,并且感谢再次给予解决方案 – vikas

相关问题