Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Servergenererat formulär

Postades av 2005-05-11 22:30:16 - Peter Nilsson, i forum asp.net generellt, Tråden har 19 Kommentarer och lästs av 465 personer

Hej

Jag har experimenterat lite med att göra ett servergenererat formulär. Målet är att användaren ska kunna välja hur måna inmatningar som ska göras på samma gång (hur många textboxar som ska finnas) med hjälp av en "DropDownList" med "autopostback = true". Servern genererar då ut det antal textboxar användaren valt ungefär såhär:

Protected WithEvents MainTable As System.Web.UI.HtmlControls.HtmlTable 
'MainTable är tabellen i vilken formuläret ska genereras

'"DropDownList"ans SelectedIndexChanged-sub:
For inti As Integer = 0 To list_num.SelectedIndex
Dim Row As New HtmlTableRow
Dim Cell As New HtmlTableCell
Dim Textbox As New TextBox

Textbox.ID = "txt_cat" & inti
Cell.Controls.Add(Textbox)
Row.Controls.Add(Cell)
MainTable.Controls.Add(Row)
Next



Längst ner på sidan finns två knappar, en för att spara och en för att avbryta. Allt detta ligger i en UserControl som är laddad i en cell i huvudsidan.

Så långt fungerar allt enligt mina visioner. Problemen kommer när det gäller att ta hand om den data som matats in, eller när man ändrar värdet i "DropDownList"en efter inmatning i några fält. All inmatad data försvinner nämligen. Trycker man på "Spara"-knappen (som inte har någon funktion än) försvinner även textboxarna som genererats. Jag har provat lite på måfå med "viewstate" för att få datan att stanna kvar även efter postbacks, utan positivt resultat.

Mycket tacksam för lösningar på problemet eller förslag på bättre upplägg för att nå liknande resultat.

/Peter


Svara

Sv: Servergenererat formulär

Postades av 2005-05-11 22:44:06 - Farid BenHajji

Det verkar som om du bara skapar dina textboxar på Not isPostBack, se till att du skapar dem även vid postback så skall du se att det fungerar bättre.


Svara

Sv: Servergenererat formulär

Postades av 2005-05-11 22:48:26 - Göran Andersson

Jag vet inte om det går att få fälten att läsa in sina värden när du skapar dem igen. Du har ju dock alltid värdena ifrån fälten i Request.Form, så du kan ju läsa värdena därifrån och lägga in i fälten när du återskapar dem.


Svara

Sv: Servergenererat formulär

Postades av 2005-05-11 22:52:52 - Pelle Johansson

Det finns dels ett kommando som heter FindControl - med denna kan du leta reda på dina id:n och således fånga värdena. Du kan även använda for each - för att loopa igenom alla objekt på sidan, kolla om det är textboxar, och i så fall om id:n stämmer och därefter läsa ut informationen.

Ett liknande exempel jag skrivit som behandlar lite av det du söker efter:

<code>

' loopar alla rader i tabellen för att leta checkboxar
For Each dr In tblSelection.Rows

Dim td As TableCell
For Each td In dr.Cells

Dim ctrl As Control
For Each ctrl In td.Controls
If TypeOf (ctrl) Is CheckBox Then

Dim chkbox As CheckBox = CType(ctrl, CheckBox)
If Left(chkbox.ID, 3) = "chk" Then
id = Mid(chkbox.ID, 4)
checkstatus = IIf(chkbox.Checked = True, "1", "0")

If checkstatus = 1 Then
allclear = False ' alla är inte avmarkerade
End If

' vi uppdaterar även innehållet i textboxen
Dim txtbox As TextBox = FindControl("txt" & CStr(id))
txtbox.Text = Replace(txtbox.Text, "'", "''")

' uppdaterar posten
pellesoft.dbfunctions.ExecuteQuery("CertRunnerUpd " & id & "," & checkstatus)

Exit For
End If

End If
Next
Next
Next
</code>


Svara

Sv:Servergenererat formulär

Postades av 2005-05-12 07:28:14 - Peter Nilsson

Var föreslår du att jag ska lägga koden då?
Lägger jag den i Page_Load så blir det försening på en händelse. T.ex om jag väljer 3 i listan visas bara den första. Väljer jag sedan 4 visas de tre jag valde förra gången osv.
Värdena i textboxarna hänger dock med som de ska (är kvar efter postbacken)

/Peter


Svara

Sv: Servergenererat formulär

Postades av 2005-05-12 07:35:20 - Fredrik Hjälte

Du måste lägga återskapa dina controller i Page_Init för att de ska kunna behålla viewstate.
Du måste även spara dina controller i t ex en arraylist när du skapar dom första gången, detta för att kunna återskapa dom vid postback.
I Page_Load är det försent, då har viewstate redan laddats och dina controller kommer vara tomma.


Svara

Sv:Servergenererat formulär

Postades av 2005-05-12 15:17:01 - Peter Nilsson

Jag testade att lägga in koden i page_init. Värderna verkar sparas (vilket de gör i page_load också) men jag lyckas inte få med värdet från DropDownList-en (som ligger på samma sida men inte servergenererad). Har du något förslag på hur det ska lösas?

/Peter


Svara

Sv:Servergenererat formulär

Postades av 2005-05-12 15:18:11 - Peter Nilsson

Jag använder FindControl-funktionen och det verkar som att det funkar.

/Peter


Svara

Sammanfattning: Servergenererat formulär

Postades av 2005-05-12 15:42:11 - Peter Nilsson

Lägger jag koden för att generera ut TextBoxarna i page_load sparas värdet man fyllt i då man ändrar värdet i DropDownListan som bestämmer antalet TextBoxar men ändringen blir fördröjd en postback. Ex: En visas först, man väljer 2. Efter postbacken visas fortfarande en TextBox men Listan visar 2. Man väljer då 3 och efter postbacken visas 2 TextBoxar. osv.

Lägger jag istället koden i DropDownListans SelectedIndexChanged-sub sparas inte värdet man fyllt i efter postbacken. Däremot reagerar den direkt och visar det antalet TextBoxar man valt.

Något mitt emellan vore ju att föredra. Att det reagerar vid första postbacken och att den redan inmatade datan sparas. Visst måste det gå att lösa?

/Peter


Svara

Sv: Sammanfattning: Servergenererat formulär

Postades av 2005-05-15 22:15:19 - Peter Nilsson

Är det ingen som har en lösning på detta till synes enkla problem?


Svara

Sv:Sammanfattning: Servergenererat formulär

Postades av 2005-05-16 02:30:09 - Björn Österman

Jag skrev ihop ett exempel. Kolla ifall det kan hjälpa.

// MvH Björne

dyn-textbox-test.aspx
<code>
<%@ Page language="c#" Codebehind="dyn-textbox-test.aspx.cs" AutoEventWireup="false" Inherits="test.dyn_textbox_test" %>
<HTML>
<HEAD></HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:DropDownList id="ddNumberOfTextboxes" runat="server" Width="200px" AutoPostBack="True">
<asp:ListItem Value="1">One</asp:ListItem>
<asp:ListItem Value="2">Two</asp:ListItem>
<asp:ListItem Value="3">Three</asp:ListItem>
</asp:DropDownList>
<asp:Table id="tblTextboxes" runat="server"></asp:Table>
</form>
</body>
</HTML>
</code>

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace test {
  public class dyn_textbox_test : System.Web.UI.Page {
    protected System.Web.UI.WebControls.DropDownList ddNumberOfTextboxes;
    protected System.Web.UI.WebControls.Table tblTextboxes;
  
    private void Page_Load(object sender, System.EventArgs e) {
      generateTexboxes();
    }

    private void generateTexboxes() {
      int numberOfTextboxes = 0;
      try {
        numberOfTextboxes = Convert.ToInt16(ddNumberOfTextboxes.SelectedValue);
      } catch { return; }

      tblTextboxes.Rows.Clear();
      for ( int i = 1 ; i <= numberOfTextboxes ; i++ ) {
        TextBox textbox = new TextBox();
        textbox.ID = "textbox_" + i;
        addTextbox(textbox);
      }
    }
    private void addTextbox(TextBox textbox) {
      TableRow tr = new TableRow();
      TableCell cell = new TableCell();
      tr.Cells.Add(cell);
      cell.Controls.Add(textbox);
      tblTextboxes.Rows.Add(tr);
    }
    override protected void OnInit(EventArgs e) {
      InitializeComponent();
      base.OnInit(e);
    }
    private void InitializeComponent() {    
      this.Load += new System.EventHandler(this.Page_Load);
    }
  }
}



Svara

Sv: Sammanfattning: Servergenererat formulär

Postades av 2005-05-16 21:04:32 - Peter Nilsson

Din kod verkar vara bra och den funkar för mig när jag kopierar in den i ett nytt projekt. Även när jag översätter den till vb.net-kod. Men det funkar inte när jag lägger in den i mitt befintliga projekt (i en usercontrol), inte heller när jag lägger in den i en usercontrol i det tomma projektet. Problemet verkar vara att värdet på dropdownlist:en inte hänger med. Oberoende av vad man har valt skickas värdet på det första valet i listan med till page_load (i ditt exempel "1"). Går det att komma runt eller måste jag göra en popup för det här formuläret?

/Peter


Svara

Sv:Sammanfattning: Servergenererat formulär

Postades av 2005-05-16 23:45:26 - Björn Österman

Eum... Jag testade att skapa en ascx-fil. Flyttade in controllarna. Flyttade in koden i ascx.cs-filen.
Sen skapade jag en aspx-fil och drog in ascx-controllen in på sidan. Och det fungerade bra.

Jag kan inte riktigt se vad det är som du gör annorlunda.

// MvH Björne


Svara

Sv: Sammanfattning: Servergenererat formulär

Postades av 2005-05-17 07:41:16 - Peter Nilsson

Hur lade du in ascx-sidan i aspx-sidan?
Jag skapade en cell i en tabell med runat=server där jag i page.load lade in den med

td.controls.add(findcontrol("sidan.ascx"))

Kan det ha betydelse?

/Peter


Svara

Sv:Sammanfattning: Servergenererat formulär

Postades av 2005-05-18 19:09:12 - Peter Nilsson

Det verkar som att problemet är som nämnt ovan, att antalet textboxar som genereras blir fördröjt en postback när jag lägger in det i en UserControl på det sättet. För övrigt fungerar det. Laddar du UserControlen på något annat sätt så att du inte får den fördröjningen eller går det inte att komma ifrån?

/Peter


Svara

Sv: Sammanfattning: Servergenererat formulär

Postades av 2005-05-18 19:47:02 - Björn Österman

Här är aspx-sidan

<code>
<%@ Page language="c#" Codebehind="DynTextBoxPage.aspx.cs" AutoEventWireup="false" Inherits="DynTextBoxPage" %>
<%@ Register TagPrefix="uc1" TagName="DynTextBoxControl" Src="DynTextBoxControl.ascx" %>
<HTML>
<HEAD><title>DynTextBoxPage</title></HEAD>
<body>
<form id="Form1" method="post" runat="server">
<uc1:DynTextBoxControl id="DynTextBoxControl1" runat="server"></uc1:DynTextBoxControl>
</form>
</body>
</HTML>
</code>

// MvH Björne


Svara

Sv:Sammanfattning: Servergenererat formulär

Postades av 2005-05-18 20:52:23 - Peter Nilsson

Okej. Så har jag aldrig sett usercontrols laddas förr (men jag är inte så erfaren heller), men det funkar mycket riktigt om man gör så. Men kan man ladda olika usercontrols (olika formulär) på samma ställe med hjälp av knapptryckningar någon annanstans på aspx-sidan?

/Peter


Svara

Sv: Sammanfattning: Servergenererat formulär

Postades av 2005-05-19 22:08:39 - Peter Nilsson

Jag har löst det provisoriskt med hjälp av en knapp för att uppdatera sidan, så man slipper fördröjningen.
I och med att jag har dynamiskt laddade UserControls fungerade inte din variant fullt ut, men tack så mycket för tipsen!

/Peter


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 604
27 953
271 705
6 140
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies