在formview中插入忽略数据

本文关键字:数据 插入 formview | 更新日期: 2023-09-27 18:13:21

下面的aspx代码是我的asp: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>

我使用下面的代码处理insert:

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

点击"插入"后,无论用户做了什么更改,FormView上的任何值都将在插入中写入数据库。在我看来,这似乎不合逻辑。我认为在初始化InsertItem(true)时表单中呈现的值将被写入表中,而不是在绘制屏幕时首先出现的值。

对纠正这个问题有什么想法吗?

Sean,这是一个较大的c#剪辑:

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
			
			// CLIPPED HERE to remove repeated copy of data from one data source to the other
			// Also clipped from here for brevity are routines that hide/show pannels of indidvidaul fields
			// based on ACL values of users
			
            }
        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)
        {
           
        }
    }
}​

在formview中插入忽略数据

非常确定,通过我们冗长的讨论,这与Page_Load期间的事件顺序有关。页面加载事件在按钮单击事件之前触发,因此在您尝试插入它们之前,您的下拉框中的值等已被修改。只需在Page_Load:

期间检查
if(!Page.IsPostBack)