2016-10-17 4 views
-1

Der Aspx-Code unten ist Teil meiner ASP: FormView, die von einer externen Datenquelle (eine separate Tabelle, die schließlich in das zurückgespeist wird) aufgefüllt wird. Der Benutzer darf keine Änderungen direkt an der TextBox vornehmen, sondern kann das Textfeld aktualisieren, indem er eine Auswahl in der Dropdown-Liste trifft, die den Wert in der TextBox ändert. Dieser Code funktioniert perfekt.Einfügen ignorieren Daten in Formview

<asp:TableRow> 
<asp:TableCell Width="25px"> 
    <asp:TextBox runat="server" OnTextChanged="AssetTypeTextBox_TextChanged" ID="AssetTypeTextBox" Width="25px" Readonly = "true" Text='<%#Bind("AssetType") %>' /> 
</asp:TableCell> 
<asp:TableCell Width="400px"> 
    <asp:Label runat="server" ID="AssetTypeTextLabel" Text="Blank"></asp:Label> 
</asp:TableCell> 
<asp:TableCell> 
    <asp:DropDownList runat="server" OnSelectedIndexChanged="AssetTypeDDL_SelectedIndexChanged" ID="AssetTypeDDL" AutoPostBack="true"> 
     <asp:ListItem Selected="True"> </asp:ListItem> 
     <asp:ListItem Value="34">DB2 Cluster</asp:ListItem> 
     <asp:ListItem Value="3">Desktop</asp:ListItem> 
     <asp:ListItem Value="44">DNS Appliance</asp:ListItem> 
     <asp:ListItem Value="37">EXCH Resource Cluster</asp:ListItem> 
     <asp:ListItem Value="18">Firewall</asp:ListItem> 
     <asp:ListItem Value="12">HyperV Cluster</asp:ListItem> 
     <asp:ListItem Value="11">HyperV Guest Appliance</asp:ListItem> 
     <asp:ListItem Value="10">HyperV Guest OS</asp:ListItem> 
     <asp:ListItem Value="17">IDS/IPS Device</asp:ListItem> 
     <asp:ListItem Value="15">IBM PwrX Blade Server</asp:ListItem> 
     <asp:ListItem Value="14">IBM PwrX Server</asp:ListItem> 
     <asp:ListItem Value="52">IDS/IPS Device</asp:ListItem> 
     <asp:ListItem Value="4">Laptop</asp:ListItem> 
     <asp:ListItem Value="6">Mac Desktop</asp:ListItem> 
     <asp:ListItem Value="7">Mac Laptop</asp:ListItem> 
     <asp:ListItem Value="50">Mainframe</asp:ListItem> 
     <asp:ListItem Value="19">Mainframe Tape</asp:ListItem> 
     <asp:ListItem Value="35">MFD/Printers</asp:ListItem> 
     <asp:ListItem Value="48">Net Access Card Ctl</asp:ListItem> 
     <asp:ListItem Value="47">Net IP Cameras</asp:ListItem> 
     <asp:ListItem Value="48">Net Video Converter</asp:ListItem> 
     <asp:ListItem Value="46">Net Video Recorder</asp:ListItem> 
     <asp:ListItem Value="21">Network Appliance</asp:ListItem> 
     <asp:ListItem Value="52">Network Appliance (Virtual)</asp:ListItem> 
     <asp:ListItem Value="51">Network Supervisor</asp:ListItem> 
     <asp:ListItem Value="22">Physical Tape</asp:ListItem> 
     <asp:ListItem Value="42">Rack</asp:ListItem> 
     <asp:ListItem Value="43">Remote Mgmt</asp:ListItem> 
     <asp:ListItem Value="1">Router</asp:ListItem> 
     <asp:ListItem Value="20">SAN Device</asp:ListItem> 
     <asp:ListItem Value="27">Server Enclosure</asp:ListItem> 
     <asp:ListItem Value="33">SQL Cluster</asp:ListItem> 
     <asp:ListItem Value="2">Switch</asp:ListItem> 
     <asp:ListItem Value="8">ThinClient</asp:ListItem> 
     <asp:ListItem Value="5">UNIX Workstation</asp:ListItem> 
     <asp:ListItem Value="26">VIOS Cluster(NR)</asp:ListItem> 
     <asp:ListItem Value="16">VIOS Guest OS</asp:ListItem> 
     <asp:ListItem Value="45">VLE Cluster</asp:ListItem> 
     <asp:ListItem Value="25">VMWare Guest OS</asp:ListItem> 
     <asp:ListItem Value="40">VOIP Analog Fax</asp:ListItem> 
     <asp:ListItem Value="24">VOIP Gateway</asp:ListItem> 
     <asp:ListItem Value="23">VOIP Phone</asp:ListItem> 
     <asp:ListItem Value="41">VOIP Virtual Address</asp:ListItem> 
     <asp:ListItem Value="32">Windows FO Cluster</asp:ListItem> 
     <asp:ListItem Value="9">x86 Blade Server</asp:ListItem> 
     <asp:ListItem Value="13">x86 Standard Server</asp:ListItem> 
    </asp:DropDownList> 
</asp:TableCell> 

Ich verwende den folgenden Code hinter Einsatz zu verarbeiten:

protected void InsertButton_Click1(object sender, EventArgs e) 
    { 
    ChangeFormFV.InsertItem(true); 
    Response.Redirect("InvList.aspx"); 
    } 

Nach ‚Einfügen‘ klicken, was Werte auf der Formview waren unabhängig davon, welche Änderungen vorgenommen wurden durch Der Benutzer wird in die Einfügung in die Datenbank geschrieben. Das scheint mir logisch zu sein. Ich würde denken, dass die Werte in der Form zu der Zeit, als das InsertItem (true) initialisiert wurde, in die Tabelle geschrieben wurden und nicht, was zuerst dort war, als der Bildschirm gezeichnet wurde.

Haben Sie irgendwelche Gedanken, dieses Problem zu beheben?

Sean, hier ist ein größerer Ausschnitt der C# für Sie:

using System; 
 
using System.Collections.Generic; 
 
using System.Linq; 
 
using System.Web; 
 
using System.Web.UI; 
 
using System.Web.UI.WebControls; 
 

 
namespace CInTrac 
 
{ 
 
    public partial class Update : System.Web.UI.Page 
 
    { 
 
     protected void Page_Load(object sender, EventArgs e) 
 
     { 
 
      TextBox uname = (TextBox)ChangeFormFV.Row.FindControl("SubmitByTextBox"); 
 
      if (uname != null) 
 
       uname.Text = Session["RegUser"].ToString(); 
 

 
      TextBox udate = (TextBox)ChangeFormFV.Row.FindControl("SubmitDTTextBox"); 
 
      if (udate != null) 
 
       udate.Text = DateTime.Now.ToString("MM/dd/yyyy"); 
 

 
      // AssetID 
 
      Label ustuff = (Label)RefDataFV.Row.FindControl("AssetIDLabel"); 
 
      if (ustuff != null) 
 
       Session["AID"] = ustuff.Text; 
 

 
      TextBox AIDvalue = (TextBox)ChangeFormFV.Row.FindControl("AssetIDTextBox"); 
 

 
      if (AIDvalue != null) 
 
       AIDvalue.Text = Session["AID"].ToString(); 
 
      // End of AssetID 
 

 
      // AssetType 
 
      Label atlstuff = (Label)RefDataFV.Row.FindControl("AssetTypeLabel"); 
 
      TextBox ATypevalue = (TextBox)ChangeFormFV.Row.FindControl("AssetTypeTextBox"); 
 
       if (ATypevalue != null) 
 
       ATypevalue.Text = atlstuff.Text; 
 
       Session["AssetType"] = atlstuff.Text; 
 

 
       GetAssetTypeFV.DataBind(); 
 
      Label astylbl = (Label)GetAssetTypeFV.Row.FindControl("AssetTypeLabel"); 
 
      Label ATTL = (Label)ChangeFormFV.Row.FindControl("AssetTypeTextLabel"); 
 
      if (ATTL != null) 
 
       ATTL.Text = astylbl.Text; 
 
      // End of AssetType 
 

 
      // AssetName 
 
      Label anlstuff = (Label)RefDataFV.Row.FindControl("AssetNameLabel"); 
 
      TextBox ANamevalue = (TextBox)ChangeFormFV.Row.FindControl("AssetNameTextBox"); 
 
      if (ANamevalue != null) 
 
       ANamevalue.Text = anlstuff.Text; 
 
      // End of AssetName 
 

 
      // AssetShortDesc 
 
      Label asdstuff = (Label)RefDataFV.Row.FindControl("AssetShortDescLabel"); 
 
      TextBox AShortDescvalue = (TextBox)ChangeFormFV.Row.FindControl("AssetShortDescTextBox"); 
 
      if (AShortDescvalue != null) 
 
       AShortDescvalue.Text = asdstuff.Text; 
 
      // End of AssetShortDesc 
 
\t \t \t 
 
\t \t \t // CLIPPED HERE to remove repeated copy of data from one data source to the other 
 
\t \t \t // Also clipped from here for brevity are routines that hide/show pannels of indidvidaul fields 
 
\t \t \t // based on ACL values of users 
 
\t \t \t 
 
      } 
 
     protected void AssetTypeDDL_SelectedIndexChanged(object sender, EventArgs e) 
 
     { 
 
      DropDownList pick = (DropDownList)ChangeFormFV.Row.FindControl("AssetTypeDDL"); 
 
      TextBox ATypevalue = (TextBox)ChangeFormFV.Row.FindControl("AssetTypeTextBox"); 
 
      if (ATypevalue != null) 
 
       ATypevalue.Text = pick.SelectedValue.ToString(); 
 
      Label ATTL = (Label)ChangeFormFV.Row.FindControl("AssetTypeTextLabel"); 
 
      if (ATTL != null) 
 
       ATTL.Text = pick.SelectedItem.Text; 
 
     } 
 

 
     protected void AssetStatusDdl_SelectedIndexChanged(object sender, EventArgs e) 
 
     { 
 
      DropDownList pick = (DropDownList)ChangeFormFV.Row.FindControl("AssetStatusDdl"); 
 
      TextBox AStatusvalue = (TextBox)ChangeFormFV.Row.FindControl("AssetStatusTextBox"); 
 
      if (AStatusvalue != null) 
 
       AStatusvalue.Text = pick.SelectedValue.ToString(); 
 
     } 
 

 
     protected void AssetPropTypeDdl_SelectedIndexChanged(object sender, EventArgs e) 
 
     { 
 
      DropDownList pick = (DropDownList)ChangeFormFV.Row.FindControl("AssetPropTypeDdl"); 
 
      TextBox APropTypevalue = (TextBox)ChangeFormFV.Row.FindControl("AssetPropTypeTextBox"); 
 
      if (APropTypevalue != null) 
 
       APropTypevalue.Text = pick.SelectedValue.ToString(); 
 
     } 
 

 
     protected void AssetCompany1Ddl_SelectedIndexChanged(object sender, EventArgs e) 
 
     { 
 
      DropDownList pick = (DropDownList)ChangeFormFV.Row.FindControl("AssetCompany1Ddl"); 
 
      TextBox ACompanyvalue = (TextBox)ChangeFormFV.Row.FindControl("AssetCompanyTextBox"); 
 
      if (ACompanyvalue != null) 
 
       ACompanyvalue.Text = pick.SelectedValue.ToString(); 
 
     } 
 

 
     protected void AssetPriOSDdl_SelectedIndexChanged(object sender, EventArgs e) 
 
     { 
 
      DropDownList pick = (DropDownList)ChangeFormFV.Row.FindControl("AssetPriOSDdl"); 
 
      TextBox APriOSvalue = (TextBox)ChangeFormFV.Row.FindControl("AssetPriOSTextBox"); 
 
      if (APriOSvalue != null) 
 
       APriOSvalue.Text = pick.SelectedValue.ToString(); 
 
     } 
 

 
     protected void AssetAdminGrpDdl_SelectedIndexChanged(object sender, EventArgs e) 
 
     { 
 
      DropDownList pick = (DropDownList)ChangeFormFV.Row.FindControl("AssetAdminGrpDdl"); 
 
      TextBox AAdminGrpvalue = (TextBox)ChangeFormFV.Row.FindControl("AssetAdminGrpTextBox"); 
 
      if (AAdminGrpvalue != null) 
 
       AAdminGrpvalue.Text = pick.SelectedValue.ToString(); 
 
     } 
 

 
     protected void AssetOperStatusDDL_SelectedIndexChanged(object sender, EventArgs e) 
 
     { 
 
      DropDownList pick = (DropDownList)ChangeFormFV.Row.FindControl("AssetOperStatusDDL"); 
 
      TextBox AOperStatusvalue = (TextBox)ChangeFormFV.Row.FindControl("AssetOperStatusTextBox"); 
 
      if (AOperStatusvalue != null) 
 
       AOperStatusvalue.Text = pick.SelectedValue.ToString(); 
 
     } 
 

 
     protected void InsertButton_Click1(object sender, EventArgs e) 
 
     { 
 
      ChangeFormFV.InsertItem(true); 
 
      Response.Redirect("InvList.aspx"); 
 
     } 
 

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

 
}​

+0

Wir haben nicht wirklich genug Informationen, um hier zu helfen. Ich rate absolut, aber binden Sie die Textfeldwerte beim Laden des Formulars? Wenn dies der Fall ist, legen Sie möglicherweise den Wert des Textfelds fest, bevor der Klick ausgelöst wird. Vielleicht können Sie eine Überprüfung hinzufügen, um die Werte nicht zu füllen, wenn es ein Postback ist. Ohne mehr Code von Ihrer Seite, ist es nur raten. –

+0

Dachte, dass ich das erklärt hatte, aber lassen Sie mich etwas erweitern. Die im Formular aufgefüllten Daten stammen von A. Wir sind an Quelle B gebunden und seedsen die von A gesammelten Daten in die an B gebundene Formularansicht ein und rendern sie dann auf dem Bildschirm im Einfügemodus. Zu diesem Zeitpunkt hat der Benutzer vor dem Klicken auf die Schaltfläche Einfügen die Möglichkeit, Dropdown-Listen auszuwählen und Textfelder im Formular zu ändern. Dann sollte der Inhalt des Formulars eingefügt werden. Was jedoch eingefügt wird, sind nur die Originaldaten, die von der Datenquelle A bereitgestellt werden (die nicht gebunden ist). –

+0

Richtig, ich verstehe. Hast du meine Vermutung gesehen? Ich wette, Sie binden den Textbox-Wert an SourceA in Form laden. Wenn Sie also auf die Schaltfläche klicken, wird der Wert gebunden, bevor Sie ihn einfügen können. Denken Sie daran, dass FormLoad ausgelöst wird, BEVOR Ihr Klickereignis eintritt. Dies bedeutet, dass es durchaus möglich ist, dass Sie den richtigen Wert in der Textbox haben und dann mit Werten von SourceA überschreiben. Auch hier wäre es viel einfacher, etwas mehr Code zu veröffentlichen, da wir nichts anderes sehen können als was gepostet wird. –

Antwort

0

Ziemlich sicher, dass durch unsere ausführliche Diskussion dieser die Reihenfolge der Ereignisse während des Page_Load zusammenhängt. Die Seitenladeereignisse werden vor dem Klickereignis auf die Schaltfläche ausgelöst, sodass die Werte in den Dropdownlisten und dergleichen geändert werden, bevor Sie sie einfügen. Einfach während Page_Load überprüfen:

if(!Page.IsPostBack) 

Diese Sie, um das Problem zu bekommen, sollten Sie haben, werden.

+1

Danke Sean! Hat den Trick gemacht! War über meine Werte zu schreiben! –

Verwandte Themen