大家好,提前致谢,如何保存访问动态控件的值
我已经读了几个线程,但我很困惑。事情是我动态创建一个控制面板内的一些文本框被置于一个FormView蒙山代码里......
protected void Muestra_Precio_Stock_BT_Click(object sender, EventArgs e)
{
CheckBoxList FormatosCL = (CheckBoxList)FormViewDiscos.FindControl("FormatosCL");
Panel Precio_Stock_PN = (Panel)FormViewDiscos.FindControl("CB_Precio_Stock_PN");
Label NuevoPrecioLB = null;
TextBox NuevoPrecioTB = null;
Label NuevoStockLB = null;
TextBox NuevoStockTB = null;
foreach (ListItem item in FormatosCL.Items)
{
if(item.Selected)
{
NuevoPrecioLB = new Label();
NuevoPrecioTB = new TextBox();
NuevoStockLB = new Label();
NuevoStockTB = new TextBox();
NuevoPrecioLB.ID = "NuevoPrecioLB_" + FormatosCL.Items.IndexOf(item);
NuevoPrecioLB.Text = "PRECIO " + item.Text + ": ";
NuevoPrecioTB.ID = "NuevoPrecioTB_" + FormatosCL.Items.IndexOf(item);
NuevoStockLB.ID = "NuevoStockLB_" + FormatosCL.Items.IndexOf(item);
NuevoStockLB.Text = " STOCK " + item.Text + ": ";
NuevoStockTB.ID = "NuevoStockTB_" + FormatosCL.Items.IndexOf(item);
Precio_Stock_PN.Controls.Add(NuevoPrecioLB);
Precio_Stock_PN.Controls.Add(NuevoPrecioTB);
Precio_Stock_PN.Controls.Add(NuevoStockLB);
Precio_Stock_PN.Controls.Add(NuevoStockTB);
Precio_Stock_PN.Controls.Add(new LiteralControl("<br />"));
}
}
}
好了,这工作得很好,当我运行该项目的文本框和标签创建正如所料,我可以看到它们并写入文本框。我已经将相同的代码放入Page_Load事件中,现在我可以获取创建的控件,并在单击formview的INSERT按钮时避免出现nullpointerexception(这是我的第一个问题)。问题是,在下面的代码...
protected void InsertButton_Click(object sender, EventArgs e)
{
TextBox DiscIdTB = (TextBox)FormViewDiscos.FindControl("DiscIdTB");
TextBox CaratulaTB = (TextBox)FormViewDiscos.FindControl("CaratulaTB");
CheckBoxList CancionesCL = (CheckBoxList)FormViewDiscos.FindControl("CancionesCL");
CheckBoxList FormatosCL = (CheckBoxList)FormViewDiscos.FindControl("FormatosCL");
using (SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBBDD-Discos"].ConnectionString))
{
conexion.Open();
cmd.Connection = conexion;
cmd.CommandText = "INSERT INTO DISCOS_FORMATOS (ID_DISCO, ID_FORMATO, PRECIO, STOCK) VALUES ((SELECT MAX(ID_DISCO) FROM DISCOS), @IdFormato, 0, 0)";
foreach (ListItem item in FormatosCL.Items)
{
if (item.Selected)
{
Panel Precio_Stock_PN = (Panel)FormViewDiscos.FindControl("CB_Precio_Stock_PN");
string control = "NuevoPrecioTB_" + (FormatosCL.Items.IndexOf(item));
string control2 = "NuevoStockTB_" + (FormatosCL.Items.IndexOf(item));
TextBox Precio = (TextBox)Precio_Stock_PN.FindControl(control);
TextBox Stock = (TextBox)Precio_Stock_PN.FindControl(control2);
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@IdFormato", item.Value);
cmd.Parameters.AddWithValue("@IdPrecio", Convert.ToInt32(Precio.Text));
cmd.Parameters.AddWithValue("@IdStock", Convert.ToInt32(Stock.Text));
cmd.ExecuteNonQuery();
}
}
conexion.Close();
cmd.Dispose();
}
}
当执行到达这些线路
,动态创建文本框失去了他们的价值,总是返回0 ...
cmd.Parameters.AddWithValue("@IdPrecio", Convert.ToInt32(Precio.Text));
cmd.Parameters.AddWithValue("@IdStock", Convert.ToInt32(Stock.Text));
我如何保存他们的用户输入值?
感谢您的回答Fenrir88。我已经在您指定的Page_Load中放置了创建控件的Muestra_Precio_Stock_BT_Click代码,但值仍然为0,您的意思是InsertButton_Click的代码吗? – Mazinger
嗯...好的,可以确定这可能你可以分享Page_Load事件代码。如果我正确理解代码,单击Muestra_Precio_Stock按钮时,您将为标签和文本框(将删除其中的数据)分配Null。然后,如果选择了一个项目,则再次创建它们并将它们添加到所选项目的文本中。它是否正确? – Fenrir88
好的Fenrir88,它解决了你给我的一些线索,比如把代码放在Load_Page事件中,删除控件,hummm,以及a的空分配,我们称之为“一个小细节”... If你在我的INSERT语句结尾处注意,好吧......我正在通过0正好忽略了TEXTBOXES的值“:-O,这是我的错,对不起,但正如我之前所说的,你的线索是必需品,所以谢谢你再次。 – Mazinger