Principales respuestas
Guardar datos de un listbox en una base de datos

Pregunta
-
Antes que nada un Saludo a todos. Mi duda es la siguiente: Tengo un dropdownlist, llamado dropcategorias, y un listbox, llamado lstcasos, los dos me muestran datos de dos tablas que tengo relacionadas una llamada observaciones para el dropcategroias y la otra se llama casos para el lstcasos,y los datos se grabaran en una tercera tabla llama auditoria mediante un boton llamado btnguardar y un procedimiento almacenada llamado sp_auditoria. El detalle es que al grabar los datos del drop y del listbox, me graba el numero de id, no me graba el dato que me muestra el drop y el list, he cambiado variables y tipos de datos y no e conseguido guardar los datos, solo me graba el id, o el nombre del campo. Aqui les dejo el codigo para que lo chequen y me puedan ayudar, Gracias. El detalle presiento que esta en el boton de guardar, pero no le e dado al punto. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Data; using System.Data.SqlClient; namespace datareader { public partial class relacionar : System.Web.UI.Page { string conexion = "Data Source=ISRAEL;Initial Catalog=auditorias;Integrated Security=True"; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) creacategoria(); creacasos(dropcategorias.SelectedItem.Value); } private void creacategoria() { SqlConnection conn = new SqlConnection(conexion); string sql = "Select * FROM observaciones ORDER BY idob"; SqlDataAdapter dacategoria; DataSet dscategoria; try { conn.Open(); dacategoria = new SqlDataAdapter(sql, conn); dscategoria = new DataSet(); dacategoria.Fill(dscategoria, "observaciones"); dropcategorias.DataValueField = "idob"; dropcategorias.DataTextField = "categoria"; dropcategorias.DataSource = dscategoria.Tables["observaciones"].DefaultView; dropcategorias.DataBind(); } finally { conn.Close(); } } protected void dropcategorias_SelectedIndexChanged1(object sender, EventArgs e) { creacasos(dropcategorias.SelectedItem.Value); } private void creacasos(string observaciones) { SqlConnection conn = new SqlConnection(conexion); string sql = "Select idc,nombre FROM casos " + "Where idc='" + observaciones + "' ORDER BY nombre"; SqlDataAdapter dacasos; DataSet dscasos; try { conn.Open(); dacasos = new SqlDataAdapter(sql, conn); dscasos = new DataSet(); dacasos.Fill(dscasos, "casos"); lstcasos.DataValueField = "idc"; lstcasos.DataTextField = "nombre"; lstcasos.DataSource = dscasos.Tables["casos"].DefaultView; lstcasos.DataBind(); } finally { conn.Close(); } } protected void btnguardar_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); try { conn = new SqlConnection(conexion); conn.Open(); cmd = new SqlCommand("sp_auditoria", conn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter pobservacion = new SqlParameter("@observacion", SqlDbType.VarChar); pobservacion.Value = dropcategorias.Text; cmd.Parameters.Add(pobservacion); SqlParameter pcategoria = new SqlParameter("@categoria", SqlDbType.VarChar); pcategoria.Value = lstcasos.Text; cmd.Parameters.Add(pcategoria); // ejecuta cmd.ExecuteNonQuery(); creacategoria(); } finally { conn.Close(); } } } }viernes, 22 de octubre de 2010 14:58
Respuestas
-
Esto te debe dar el valor textual del item
pobservacion.Value = dropcategorias.SelectedItem.ToString();
Esto te devolverá el ID
pobservacion.Value = dropcategorias.SelectedValue;
Para el caso del ListBox
Esto te debe dar el valor textual del item
ListBox1.SelectedItem.Text
Pero no se por que debes guardar el valor textual en lugar del value es decir el ID, pues sería mejor para la integridad referencial de tu base de datos.
Saludos!!!
Coding "La lucha diaria" - D3S........D4S
"Ya tengo Blog :D": Nueva Entrada Silverlight- Propuesto como respuesta Felipe Sotelo S viernes, 22 de octubre de 2010 15:58
- Marcado como respuesta tonny83 viernes, 22 de octubre de 2010 16:10
viernes, 22 de octubre de 2010 15:45
Todas las respuestas
-
1-) Nunca empieces a nombrar un store procedure cómo sp esto no es una buena práctica
2-) deberías identar el código para que te puedan ayudar
Saludos!!
Coding "La lucha diaria" - D3S........D4S
"Ya tengo Blog :D": Nueva Entrada Silverlightviernes, 22 de octubre de 2010 15:06 -
Aca dejo el codigo indentado, no se que tan bien indentado este, por lo pronto no lo he analizado, pero lo dejo para ver si alguien mas te puede ayudar.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Data; using System.Data.SqlClient; namespace datareader { public partial class relacionar : System.Web.UI.Page { string conexion = "Data Source=ISRAEL;Initial Catalog=auditorias;Integrated Security=True"; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) creacategoria(); creacasos(dropcategorias.SelectedItem.Value); } private void creacategoria() { SqlConnection conn = new SqlConnection(conexion); string sql = "Select * FROM observaciones ORDER BY idob"; SqlDataAdapter dacategoria; DataSet dscategoria; try { conn.Open(); dacategoria = new SqlDataAdapter(sql, conn); dscategoria = new DataSet(); dacategoria.Fill(dscategoria, "observaciones"); dropcategorias.DataValueField = "idob"; dropcategorias.DataTextField = "categoria"; dropcategorias.DataSource = dscategoria.Tables["observaciones"].DefaultView; dropcategorias.DataBind(); } finally { conn.Close(); } } protected void dropcategorias_SelectedIndexChanged1(object sender, EventArgs e) { creacasos(dropcategorias.SelectedItem.Value); } private void creacasos(string observaciones) { SqlConnection conn = new SqlConnection(conexion); string sql = "Select idc,nombre FROM casos " + "Where idc='" + observaciones + "' ORDER BY nombre"; SqlDataAdapter dacasos; DataSet dscasos; try { conn.Open(); dacasos = new SqlDataAdapter(sql, conn); dscasos = new DataSet(); dacasos.Fill(dscasos, "casos"); lstcasos.DataValueField = "idc"; lstcasos.DataTextField = "nombre"; lstcasos.DataSource = dscasos.Tables["casos"].DefaultView; lstcasos.DataBind(); } finally { conn.Close(); } } protected void btnguardar_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); try { conn = new SqlConnection(conexion); conn.Open(); cmd = new SqlCommand("sp_auditoria", conn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter pobservacion = new SqlParameter("@observacion", SqlDbType.VarChar); pobservacion.Value = dropcategorias.Text; cmd.Parameters.Add(pobservacion); SqlParameter pcategoria = new SqlParameter("@categoria", SqlDbType.VarChar); pcategoria.Value = lstcasos.Text; cmd.Parameters.Add(pcategoria); // ejecuta cmd.ExecuteNonQuery(); creacategoria(); } finally { conn.Close(); } } } } } }
"Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta". Si la respuesta te ha sido util Votala."viernes, 22 de octubre de 2010 15:36 -
ok Gracias por lo del codigo lo que pasa que no habia utilizado este foroviernes, 22 de octubre de 2010 15:40
-
Esto te debe dar el valor textual del item
pobservacion.Value = dropcategorias.SelectedItem.ToString();
Esto te devolverá el ID
pobservacion.Value = dropcategorias.SelectedValue;
Para el caso del ListBox
Esto te debe dar el valor textual del item
ListBox1.SelectedItem.Text
Pero no se por que debes guardar el valor textual en lugar del value es decir el ID, pues sería mejor para la integridad referencial de tu base de datos.
Saludos!!!
Coding "La lucha diaria" - D3S........D4S
"Ya tengo Blog :D": Nueva Entrada Silverlight- Propuesto como respuesta Felipe Sotelo S viernes, 22 de octubre de 2010 15:58
- Marcado como respuesta tonny83 viernes, 22 de octubre de 2010 16:10
viernes, 22 de octubre de 2010 15:45 -
Gracias por tu ayuda Felipe me ha funcionado lo del drop, ya inserto el dato. Necesitaba insertar el dato en esa tabla por que realizare unas consultas mas adelante y solo ocupare el texto. Con el listbox lo deje asi pcategoria.Value = lstcasos.Text; pero no me inserta ningun dato, lo checare si tienes alguna opcion te lo agradeceria. Por el momento Gracias por tu rapida respuesta y dedicacion en tiempo. Saludos!viernes, 22 de octubre de 2010 16:16
-
Intenta así:
pcategoria.Value = lstcasos.SelectedItem.Text;
Saludos
Coding "La lucha diaria" - D3S........D4S
"Ya tengo Blog :D": Nueva Entrada Silverlightviernes, 22 de octubre de 2010 16:17 -
Gracias Felipe ... ya no utilice ningun listbox lo cambie por un dropdownlist y me resulto perfectamente pcategoria.Value =dropcasos.SelectedItem.ToString(); Gracias por la ayuda, me has ahorrado mas dias de dolor de espalda :) Saludos!viernes, 22 de octubre de 2010 17:20