皆さん、ありがとうございます。ダイナミックコントロールにアクセスする値をどのように保持する
私はいくつかのスレッドについて読んでいますが、私は非常に混乱しています。事は私が動的に...このコードwhith 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イベントに同じコードを入れました。そして今、私はフォームビューのINSERTボタンをクリックすると、作成されたコントロールを取得し、nullpointerexception(これは私の最初の問題でした)を避けることができます。問題は
cmd.Parameters.AddWithValue("@IdPrecio", Convert.ToInt32(Precio.Text));
cmd.Parameters.AddWithValue("@IdStock", Convert.ToInt32(Stock.Text));
どのように保存することができます...、動的に作成されたテキストボックスは常に0を返し、その値を失った実行は、これらの行に到達したときに
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();
}
}
...次のコードでは、ということ
です彼らのユーザーが入力した値?
あなたの答えFenrir88に感謝します。私はMuestra_Precio_Stock_BT_Clickコードを配置しました。これは、あなたが特化したように、Page_Loadにコントロールを作成するものですが、値は0です。InsertButton_Clickのコードを意味しましたか? – Mazinger
ええと...これは確かにあなたがPage_Loadイベントコードを共有する可能性があります。コードが正しく理解されていれば、Muestra_Precio_StockボタンをクリックするとラベルとテキストボックスにNullが割り当てられます(ラベル内のデータは削除されます)。次に、アイテムが選択されている場合は、アイテムを再度作成し、選択したアイテムのテキストを追加します。これは正しいです? – Fenrir88
Ok Fenrir88、Load_Pageイベント内にコードを入れて、コントロール、hummm、よく、そして、aのnull assigmentsを削除するなど、私がくれた手がかりのいくつかのおかげで解決しました。あなたは私のINSERTステートメントの最後に注意を払っています...私はテキストボックスの値の代わりに0以上を渡していました ":-O、それは私のせいでした、申し訳ありませんが、前にも述べたように、あなたの手がかりは必須です。 – Mazinger