2017-06-21 14 views
0

在我的aspx頁面我有一個面板(通用面板)。這個由多個面板動態構建。每個內部面板包含一個標籤(id = "lbl"+ i.ToString()),一張照片(id = "img"+ i.ToString())和一個按鈕提交("btn" + i.ToString())動態創建並填充SQL數據。點擊提交按鈕後,我想在通用面板旁邊的更新面板中的標籤中顯示名稱。我怎樣才能做到這一點?有人有解決方案嗎?非常感謝您的幫助 我的aspx文件在asp.net中c#如何獲得單擊提交按鈕後動態創建的控件的值


          
  
<asp:Panel ID="Panel_Generic" runat="server" Style="margin-left:30px;margin-right:30px;"> 
 
<div class="row"> 
 
       <div class="col-lg-12"> 
 
        <h2 class="page-header"> 
 
         Vente à emporter 
 
         <small>Restaurant</small> 
 
        </h2> 
 

 
        <ol class="breadcrumb"> 
 
         <li> 
 
          <i class="fa fa-dashboard"></i>Vos Informations 
 
         </li> 
 
         <li> 
 
          <i class="fa fa-file"></i> Votre commande 
 
         </li> 
 
         <li class="active"> 
 
          <i class="fa fa-file"></i> Valider 
 
         </li> 
 
        </ol> 
 
       </div> 
 
      </div> 
 

 
      <div style="display:flex;justify-content:space-around;margin-bottom:30px"> 
 
       <asp:Button ID="btn_Entree" width="150px" class="btn btn-info btn-lg" runat="server" Text="Entrées" /> 
 
       <asp:Button ID="btn_Plat" width="150px" class="btn btn-warning btn-lg" runat="server" Text="Plats" /> 
 
       <asp:Button ID="btn_dessert" width="150px" class="btn btn-success btn-lg" runat="server" Text="Desserts" /> 
 
       <asp:Button ID="btn_boisson" width="150px" class="btn btn-primary btn-lg" runat="server" Text="Boissons" /> 
 
      </div> 
 
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
 
      <div> 
 
       <asp:Panel ID="Panel_Entree" class="col-md-9" runat="server" style="display:flex;flex-wrap:wrap"> 
 
       </asp:Panel> 
 
       <asp:UpdatePanel ID="UpdatePanel1" class="col-md-3" runat="server"> 
 
        <ContentTemplate> 
 
         <div class="panel panel-danger"> 
 
          <div class="panel-heading">A emporter</div> 
 
          <div class="panel-body"> 
 
           <asp:Button ID="Button1" class="btn btn-danger btn-lg" runat="server" Text="Valider votre commande" style="justify-content:center"/> 
 
           <div style="border-bottom:1px solid black;margin-top:20px"></div> 
 
           <div> 
 
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
 
           </div> 
 
          </div> 
 
         </div> 
 
        </ContentTemplate> 
 
       </asp:UpdatePanel> 
 
      </div> 
 
     </asp:Panel>

我後面的代碼


          
  
string constr = ConfigurationManager.ConnectionStrings["restau"].ConnectionString; 
 

 
      protected void Page_Load(object sender, EventArgs e) 
 
      { 
 
       //if (!IsPostBack) 
 
       //{ 
 
        BindEntree(); 
 
       //} 
 
      } 
 

 
      protected void BindEntree() 
 
      { 
 
       SqlConnection con = null; 
 
       SqlCommand cmd = null; 
 
       SqlDataAdapter sda = new SqlDataAdapter(); 
 
       DataSet ds = new DataSet(); 
 
       string strQuery = "select * from recette_restau2 where type_plat='entree' and prix_vente is not null and nbre_pers is not null and picture is not null"; 
 

 
       con = new SqlConnection(constr); 
 

 
       try 
 
       { 
 
        con.Open(); 
 

 
        cmd = new SqlCommand(strQuery, con); 
 

 
        sda.SelectCommand = cmd; 
 
        sda.Fill(ds, "TableEntree"); 
 
        
 
        for (int i = 0; i < ds.Tables["TableEntree"].Rows.Count; i++) 
 
        { 
 
         byte[] barrImg = (byte[])ds.Tables["TableEntree"].Rows[i][15]; 
 

 
         if (barrImg != null && barrImg.Length > 0) 
 
         { 
 
          int identree = Convert.ToInt16(ds.Tables["TableEntree"].Rows[i][0]); 
 

 
          string base64String = Convert.ToBase64String(barrImg, 0, barrImg.Length); 
 

 
          System.Web.UI.HtmlControls.HtmlGenericControl divEntree = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
 
          divEntree.Attributes.Add("class", "panel panel-body"); 
 
          divEntree.Style.Add("Border", "1px solid #C7CAC9"); 
 
          divEntree.Style.Add("BorderColor", "red"); 
 
          divEntree.Style.Add("width", "350px"); 
 
          divEntree.Style.Add("height", "350px"); 
 
          divEntree.Style.Add("margin-right", "20px"); 
 
          divEntree.Style.Add("margin-bottom", "20px"); 
 
          divEntree.Style.Add("display", "flex"); 
 
          divEntree.Style.Add("flex-direction", "column"); 
 
          divEntree.Style.Add("justify-content", "space-between"); 
 

 
          System.Web.UI.HtmlControls.HtmlGenericControl divInfo = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
 

 
          System.Web.UI.HtmlControls.HtmlGenericControl divTitrePrix = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
 
          divTitrePrix.Style.Add("display", "flex"); 
 
          divTitrePrix.Style.Add("justify-content", "space-between"); 
 

 

 

 

 
          Label lblTitre = new Label(); 
 
          lblTitre.ID = "lblTitre" + i.ToString(); 
 
          lblTitre.Style.Add("font-size", "1.5em"); 
 
          lblTitre.Style.Add("margin-bottom", "10px"); 
 
          lblTitre.Text = Convert.ToString(ds.Tables["TableEntree"].Rows[i][2]); 
 

 
          //Label lblObserv = new Label(); 
 
          //lblObserv.ID = "lblObserv" + i.ToString(); 
 
          //lblObserv.Text = Convert.ToString(ds.Tables["TableEntree"].Rows[i][16]); 
 

 
          TextBox lblPrix = new TextBox(); 
 
          lblPrix.ID = "lblPrix" + i.ToString(); 
 
          lblPrix.Style.Add("font-size", "1.1em"); 
 
          lblPrix.Style.Add("margin-bottom", "10px"); 
 
          lblPrix.Style.Add("height", "30px"); 
 
          lblPrix.Style.Add("width", "70px"); 
 
          lblPrix.Style.Add("color", "white"); 
 
          lblPrix.Style.Add("background-color", "red"); 
 
          lblPrix.Style.Add("justify-content", "center"); 
 
          lblPrix.Style.Add("align-items", "center"); 
 
          lblPrix.Style.Add("text-align", "center"); 
 
          lblPrix.Attributes.Add("ReadOnly", "true"); 
 
          lblPrix.Attributes.Add("enabled", "false"); 
 

 

 

 
          lblPrix.Text = Convert.ToString(ds.Tables["TableEntree"].Rows[i][4] + " €"); 
 

 
          Image ImageEntree = new Image(); 
 
          ImageEntree.ImageUrl = "data:image/jpg;base64," + base64String; 
 
          ImageEntree.Style.Add("width", "50%"); 
 
          ImageEntree.Style.Add("height", "50%"); 
 
          ImageEntree.Style.Add("margin-right", "10px"); 
 

 

 

 
          System.Web.UI.HtmlControls.HtmlGenericControl divChoix = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
 
          divChoix.Style.Add("display", "flex"); 
 
          divChoix.Style.Add("justify-content", "center"); 
 
          divChoix.Style.Add("align-items", "center"); 
 

 

 

 
          System.Web.UI.HtmlControls.HtmlGenericControl divBtnMinusPlus = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
 
          divBtnMinusPlus.Attributes.Add("class", "input-group"); 
 
          divBtnMinusPlus.Style.Add("margin-right", "10px"); 
 

 
          System.Web.UI.WebControls.Image img1 = new System.Web.UI.WebControls.Image(); 
 
          img1.ID = "img1" + i.ToString(); 
 
          img1.Attributes.Add("width", "15px"); 
 
          img1.Attributes.Add("height", "15px"); 
 
          img1.Attributes.Add("OnClick", "img1_Click"); 
 
          img1.ImageUrl = "Content/images/moins_rond.png"; 
 

 
          System.Web.UI.WebControls.Image img2 = new System.Web.UI.WebControls.Image(); 
 
          img2.ID = "img2" + i.ToString(); 
 
          img2.Attributes.Add("OnClick", "img2_Click"); 
 
          img2.ImageUrl = "Content/images/plus_rond.png"; 
 
          img2.Attributes.Add("width", "15px"); 
 
          img2.Attributes.Add("height", "15px"); 
 
          
 
          TextBox txtBoxNbre = new TextBox(); 
 
          txtBoxNbre.ID = "txtBoxNbre" + i.ToString(); 
 
          txtBoxNbre.Style.Add("width", "50px"); 
 
          txtBoxNbre.Style.Add("text-align", "center"); 
 

 
          AjaxControlToolkit.NumericUpDownExtender numericExtender = new AjaxControlToolkit.NumericUpDownExtender(); 
 
          numericExtender.ID = "numericExtender" + i.ToString(); 
 
          numericExtender.Width = 80; 
 
          numericExtender.Minimum = 1; 
 
          numericExtender.Maximum = 20; 
 
          numericExtender.TargetButtonUpID = "img2" + i.ToString(); 
 
          numericExtender.TargetButtonDownID = "img1" + i.ToString(); 
 
          numericExtender.TargetControlID = "txtBoxNbre" + i.ToString(); 
 

 

 

 

 
          divBtnMinusPlus.Controls.Add(img1); 
 
          divBtnMinusPlus.Controls.Add(txtBoxNbre); 
 
          divBtnMinusPlus.Controls.Add(img2); 
 
          divBtnMinusPlus.Controls.Add(numericExtender); 
 
          
 
          Button btnPrix = new Button(); 
 
          btnPrix.ID = "btnPrix" + i.ToString(); 
 
          //btnPrix.Attributes.Add("Class", "btn btn-danger hvr-icon-forward"); 
 
          btnPrix.CssClass = "btn btn-danger hvr-icon-forward"; 
 
          btnPrix.Attributes.Add("runat", "server"); 
 
          btnPrix.Text = "Choisir"; 
 
          btnPrix.Click += new System.EventHandler(btnPrix_Click); 
 
          //btnPrix.CommandArgument = "<%# Eval('id_recette') %>"; 
 

 
          HiddenField hf = new HiddenField(); 
 
          hf.ID = "hf" +i.ToString(); 
 
          hf.Value = Convert.ToString(ds.Tables["TableEntree"].Rows[i][0]); 
 

 

 

 
          divTitrePrix.Controls.Add(lblTitre); 
 
          divTitrePrix.Controls.Add(lblPrix); 
 

 

 

 

 
          divInfo.Controls.Add(divTitrePrix); 
 
          //divInfo.Controls.Add(lblObserv); 
 

 
          divEntree.Controls.Add(divInfo); 
 
          divEntree.Controls.Add(new LiteralControl("<br />")); 
 

 
          divChoix.Controls.Add(ImageEntree); 
 

 
          divChoix.Controls.Add(divBtnMinusPlus); 
 

 
          divEntree.Controls.Add(divChoix); 
 

 
          divEntree.Controls.Add(new LiteralControl("<br />")); 
 

 
          divEntree.Controls.Add(btnPrix); 
 

 
          divEntree.Controls.Add(hf); 
 

 

 

 

 
          Panel_Entree.Controls.Add(divEntree); 
 
       protected void btnPrix_Click(object sender, EventArgs e) 
 
      {    
 
             try 
 
       {//string s = (sender as Button).Text; 
 
        Button btn = (Button)sender; 
 

 
        string id = btn.CommandArgument; 
 

 
        Label1.Text = id; 
 
       } 
 
       catch (Exception ex) 
 
       { 
 
        Label2.Text = ex.Message.ToString(); 
 

 
       } 
 
       }
+1

給我們展示一些代碼人!展示你的嘗試! –

+0

您正在創建的控件是Serverside控件,即asp:Labe ... l還是html控件,即

+0

當然。抱歉。現在你的代碼是 – vitruve

回答

0

它應該是這樣的

for (int i=1; i<=5; i++) 
{ 
    Label myLabel = new Label(); 

    // Set the label's Text and ID properties. 
    myLabel.Text = "Label" + i.ToString(); 
    myLabel.ID = "Label" + i.ToString(); 
    PlaceHolder1.Controls.Add(myLabel); 
    // Add a spacer in the form of an HTML <br /> element. 
    PlaceHolder1.Controls.Add(new LiteralControl("<br />")); 
} 

它創建DY NAMIC標籤與IDS LABEL1,LABEL2 &等

,如果你想創建動態按鈕,其點擊所以

Button btn = new Button(); 
btn.ID = "btnSubmit"; 
btn.Text = "Submit"; 
btn.Click += new EventHandler(btnSubmit_Click); 
this.Controls.Add(btn); 

您需要的事件處理程序btnSubmit_Click到click事件添加到按鈕

希望這將有助於

+0

謝謝沙燕。但是,當我點擊提交按鈕時,我如何獲得標籤內容以便在旁邊的面板中顯示它? – vitruve

+0

那麼你需要編碼像 'var allLabels = panel1.Controls.OfType

+0

再次感謝沙燕。我的觀點是,當創建所有divEntree時,我希望當用戶單擊提交按鈕以顯示更新面板中的所有內容 – vitruve

0

我可能誤解了你的意圖,但我認爲這會做你的問題。

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       BindEntree(); 
      } 
      else 
      { 
       Label1.Text = TextBox1.Text; 
      } 

     } 

*您必須消除您的標籤的文本值:

<asp:Label ID="Label1" runat="server" ></asp:Label> 

請記住有這樣做的幾種方法,這是相當粗糙的,但它會給你一個想法如何回發與更新面板一起工作..

+0

感謝您的回覆DaniDev。我當然可以解釋我非常想要的東西。實際上,我在面板中創建了多個div(divEntree),具體取決於我的sql服務器值。每個divEntree擁有其提交按鈕。我希望當用戶點擊它時將divEntree的內容顯示在放置在我面板旁邊的更新面板中。我不知道該怎麼做,因爲我無法得到顯示在divEntree – vitruve

+0

中的sql行的確切值,但是仍然沒有完全清楚。我只看到一個更新面板。你想讓每個動態生成的按鈕顯示什麼控件(文本框)的內容?到什麼控制(標籤)? – DaniDev

+0

哈哈。對不起我的英語不好。用戶可以選擇他想要在更新面板中顯示的內容。例如,頁面顯示10 divEntree。他通過在更新面板中按下每個提交按鈕來選擇其中的2個並顯示它們的內容。在更新面板中,您將擁有照片和他選擇的名字 – vitruve

相關問題