Soy nuevo en C# y trato de buscar un cuadro de lista de la siguiente manera: Primero tengo esto:
public partial class FrmCodes: Form
{
...
SqlConnection Cn = new SqlConnection(@"Server = AMR-PC\SQLEXPRESS; Database=PlanningDB; Integrated Security = True");
SqlCommand cmd;
SqlDataReader DataRead;
...
public FrmCodes()
{
InitializeComponent();
cmd = new SqlCommand("Select Item from Items", Cn);
Cn.Open();
DataRead = cmd.ExecuteReader();
while (DataRead.Read())
{
ListItems.Items.Add(DataRead["Item"].ToString());
}
DataRead.Close();
Cn.Close();
}
Y trató de hacer esto:
private void txtSrch_TextChanged(object sender, EventArgs e)
{
ListItems.Items.Clear();
while (DataRead.Read())
{
string str = DataRead["Item"].ToString();
string srch = txtSrch.Text;
if (str.Contains(srch))
{
ListItems.Items.Add(str);
}
}
}
No funcionó, traté de hacer una nueva consulta de selección de sql que obtuviera datos dependiendo de txtSrch.Text
pero tampoco obtuve nada. Gracias por adelantado.
Edición # 1
Esta es la consulta que mencioné antes:
private void txtSrch_TextChanged(object sender, EventArgs e)
{
ListItems.Items.Clear();
SqlConnection Cn2 = new SqlConnection(@"Server = AMR-PC\SQLEXPRESS; Database=PlanningDB; Integrated Security = True");
Cn2.Open();
string srch = txtSrch.Text;
using (SqlDataAdapter a2 = new SqlDataAdapter("Select Item from Items WHERE Item LIKE '%" + srch + "%'", Cn2))
{
var t2 = new DataTable();
a2.Fill(t2);
ListItems.DisplayMember = "Item";
ListItems.ValueMember = "Code";
ListItems.DataSource = t2;
}
}
Esto no afectó a los elementos en el cuadro de lista, no pasa nada en txtSrch
Cambiar.
Solución del problema
Otra solución Dataview
gracias a @Trevor
public partial class FrmCodes: Form
{
...
SqlConnection Cn = new SqlConnection(@"Server = AMR-PC\SQLEXPRESS; Database=PlanningDB; Integrated Security = True");
SqlDataAdapter da;
DataTable dt = new DataTable();
...
public FrmCodes()
{
InitializeComponent();
da = new SqlDataAdapter("Select Item from Items", Cn);
da.Fill(dt);
DataView dv = new DataView(dt);
ListItems.DataSource = dv;
ListItems.DisplayMember = "Item";
}
Cambio de cuadro de texto:
private void txtSrch_TextChanged(object sender, EventArgs e)
{
ListItems.DataSource = null;
DataView dv = new DataView(dt);
string srch = txtSrch.Text;
dv.RowFilter = string.Format("Item Like '%{0}%'", srch);
ListItems.DataSource = dv;
ListItems.DisplayMember = "Item";
}
Gracias.
No hay comentarios.:
Publicar un comentario