繁体   English   中英

使用 ADO.Net DataSet 和 TableAdapter 填充带有过滤器的组合框

[英]Using ADO.Net DataSet and TableAdapter for populating combox with filter

我有一个带有数据集和 tableadapter 的 windows 窗体。

Table1 [id, action, info]
Table2 [id, actionId, command]

private void cbActions_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.optionsTableAdapter.Fill(this.actionsDS.Options);
        BindingSource source1 = new BindingSource();
        source1.DataSource = actionsDS;
        source1.Filter = "ActionId = " + cbActions.SelectedValue;
        cbOptions.DataSource = source1;
    }

我不知道如何根据第一个组合框 (cbActions) 过滤第二个组合框 (cbOptions)。

在 sql 中,我将使用“SELECT options where actionid = 5”但是,为简单起见,我尝试使用内置的 ado.net 数据集和数据表。

它必须很容易,我必须接近。

昨天想了好几个小时。

int actionId = 5;
            ActionsDS.OptionsDataTable optionsDt = optionsTableAdapter.GetByActionId(actionId);
            cbOptions.DataSource = optionsDt;

使用数据关系可能更简单 - 您的 CarDataSet 中有 3 个表 - 制造商、型号、修剪。 它们之间都有 DataRelations,假设它们被命名为 ManufacuterModel 和 ModelTrim

您打开数据源窗口(查看菜单-其他窗口)并展开每个节点。 你会看到你有制造商、模型和修剪的顶级节点,但在制造商下你有模型,在它下面你有修剪(和根模型下的另一个修剪)

将Manufacturer拖到窗体上创建一个DataGridView,将Manufacturer的子级Model拖到窗体上,拖拽Model的子级Trim

您现在应该有 3 个绑定源,但关键是:

  • 制造商绑定源绑定到数据集表
  • 模型 bs 绑定到制造商 bs 并有一个数据成员设置为制造商模型关系的名称
  • 修剪 bs 绑定到模型 bs 并具有 ModelTrim 的数据成员

运行应用程序; 在制造商网格中选择父行将模型网格过滤为来自该制造商的汽车,并且修剪细化为仅研磨第一个模型。 选择一个模型和修剪改变等

停止程序(只是为了演示它的工作)并将组合框绑定到那些绑定源,删除网格(除非您使用组合来驱动网格,在这种情况下,网格可能更适合您的 UI

不要忘记,这只有在数据表充满数据(相关的)时才有效——如果你有成千上万的制造商、型号和装饰,那将是一个大数据集(选择性加载会更好,但它更多复杂的)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM