c# 从组合框 SQL 填充检查列表框
c# fill checkelistbox from combobox SQL
我在 c# 中有 ha winform 应用程序 从 SQL 服务器数据库获取值。
我可以获得我想要在 combobox
中显示的值,但是根据 selection 的不同,我想在 checkedcombobox
中显示相应的 sql 行供用户使用select想要的那个。
我的代码是:(填充组合框)
SqlDataAdapter SDA = new SqlDataAdapter("select distinct desempenho from vidros", con);
DataTable DTT = new DataTable();
SDA.Fill(DTT);
desempenho.Items.Clear();
foreach (DataRow ROW in DTT.Rows)
{
desempenho.Items.Add(ROW["desempenho"].ToString());
}
并且:(在选中的组合框中显示 selected 行) 不起作用。
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con);
DataTable DTT = new DataTable();
sda.Fill(DTT);
checkedListBox1.Items.Clear();
foreach (DataRow AB in DTT.Rows)
{
checkedListBox1.Items.Add(AB["desc"].ToString());
}
}
这是为用户提供多项选择的最佳方式吗?
有谁知道代码可能有什么问题?
提前致谢。
这个错误迟早会发生在每个人身上。
DESC 是几乎所有现有数据库系统中的保留关键字。它在 ORDER BY 子句中用于使结果降序排列。
因此,如果您确实有一个以这种方式命名的字段(最好尽快更改该名称),您需要将其包含在转义字符中(Sql 服务器使用方括号)
SqlDataAdapter sda = new SqlDataAdapter(@"select [desc]
from vidros where desempenho ='" + desempenho.Text + "'", con);
说我也推荐使用参数化查询。在您的情况下,您应该相对安全,但最好完全避免 sql 注入
的任何可能性
SqlDataAdapter sda = new SqlDataAdapter(@"select [desc]
from vidros where desempenho = @emp", con);
sda.SelectCommand.Parameters.Add("@emp", SqlDbType.NVarChar).Value = desempenho.Text;
.....
看来绑定列表框的代码放错了地方。
如果你想根据combobox的选中项绑定listbox,你需要在combobox的SelectedIndexChanged事件中写这个逻辑。
如果您将代码移动到组合框的 SelectedIndexChanged 事件处理程序,如下所示。
private void desempenho_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con);
DataTable DTT = new DataTable();
sda.Fill(DTT);
checkedListBox1.Items.Clear();
foreach (DataRow AB in DTT.Rows)
{
checkedListBox1.Items.Add(AB["desc"].ToString());
}
}
将此处理程序附加到处理程序的 SelectedIndexChanged 事件,它应该可以解决问题。
我在 c# 中有 ha winform 应用程序 从 SQL 服务器数据库获取值。
我可以获得我想要在 combobox
中显示的值,但是根据 selection 的不同,我想在 checkedcombobox
中显示相应的 sql 行供用户使用select想要的那个。
我的代码是:(填充组合框)
SqlDataAdapter SDA = new SqlDataAdapter("select distinct desempenho from vidros", con);
DataTable DTT = new DataTable();
SDA.Fill(DTT);
desempenho.Items.Clear();
foreach (DataRow ROW in DTT.Rows)
{
desempenho.Items.Add(ROW["desempenho"].ToString());
}
并且:(在选中的组合框中显示 selected 行) 不起作用。
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con);
DataTable DTT = new DataTable();
sda.Fill(DTT);
checkedListBox1.Items.Clear();
foreach (DataRow AB in DTT.Rows)
{
checkedListBox1.Items.Add(AB["desc"].ToString());
}
}
这是为用户提供多项选择的最佳方式吗? 有谁知道代码可能有什么问题?
提前致谢。
这个错误迟早会发生在每个人身上。
DESC 是几乎所有现有数据库系统中的保留关键字。它在 ORDER BY 子句中用于使结果降序排列。
因此,如果您确实有一个以这种方式命名的字段(最好尽快更改该名称),您需要将其包含在转义字符中(Sql 服务器使用方括号)
SqlDataAdapter sda = new SqlDataAdapter(@"select [desc]
from vidros where desempenho ='" + desempenho.Text + "'", con);
说我也推荐使用参数化查询。在您的情况下,您应该相对安全,但最好完全避免 sql 注入
的任何可能性SqlDataAdapter sda = new SqlDataAdapter(@"select [desc]
from vidros where desempenho = @emp", con);
sda.SelectCommand.Parameters.Add("@emp", SqlDbType.NVarChar).Value = desempenho.Text;
.....
看来绑定列表框的代码放错了地方。 如果你想根据combobox的选中项绑定listbox,你需要在combobox的SelectedIndexChanged事件中写这个逻辑。
如果您将代码移动到组合框的 SelectedIndexChanged 事件处理程序,如下所示。
private void desempenho_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con);
DataTable DTT = new DataTable();
sda.Fill(DTT);
checkedListBox1.Items.Clear();
foreach (DataRow AB in DTT.Rows)
{
checkedListBox1.Items.Add(AB["desc"].ToString());
}
}
将此处理程序附加到处理程序的 SelectedIndexChanged 事件,它应该可以解决问题。