【问题标题】:How to manipulate combobox by another combobox in C# depending on item selection [duplicate]如何根据项目选择通过C#中的另一个组合框操作组合框[重复]
【发布时间】:2016-09-10 07:09:51
【问题描述】:

我的数据库中有两个表,它们是公司和代表,在我的账单表格中,我有两个组合框,一个用于显示公司,另一个用于显示代表......

现在,当我在第一个组合框中选择公司时,代表的第二个组合框应显示与所选公司相关的代表。 Company 表有主键compIdDelegate 表有外键compId ...

我尝试像这样对其进行编码,但它没有给我所需的结果,它只是显示所有代表......任何帮助!

public PBillFrm()
{
    InitializeComponent();

    da = new SqlDataAdapter("select compId, compName from company", cn);
    da.Fill(dt);

    PBillCompNamecmbo.DataSource = dt;
    PBillCompNamecmbo.DisplayMember = "compName";
    PBillCompNamecmbo.ValueMember = "compId";

    da2 = new SqlDataAdapter("select delId,delName from delegate where compId=" + PBillCompNamecmbo.ValueMember + "", cn);
    da2.Fill(dt2);

    pBillDelNamecmbo.DataSource = dt2;
    pBillDelNamecmbo.DisplayMember = "delName";
    pBillDelNamecmbo.ValueMember = "delId";                     
}

【问题讨论】:

  • 从这里开始:where compId=" + PBillCompNamecmbo.ValueMember 实际上扩展为where compId=compId,它始终是true,并且不应用任何过滤。您应该绑定一个包含所需 compId 值的参数。
  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入

标签: c# sql-server winforms combobox


【解决方案1】:

提示 1: 将PBillCompNamecmbo 的 AutoPostBack 属性设置为“TRUE

提示 2: 将以下代码移至OnChangeFunction of PBillCompNamecmbo

da2 = new SqlDataAdapter("select delId,delName from delegate where compId=@Id", cn);
da2.Fill(dt2);
pBillDelNamecmbo.SelectCommand.Parameters.AddWithValue("@Id", Convert.ToInt32(PBillCompNamecmbo.ValueMember));
pBillDelNamecmbo.DataSource = dt2;
pBillDelNamecmbo.DisplayMember = "delName";
pBillDelNamecmbo.ValueMember = "delId";    

【讨论】:

  • 我认为 OP 使用的是 WinForms 而不是 WebForms。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多