【问题标题】:Dynamically added Dropdownlist's SelectedValue not working动态添加的下拉列表的 SelectedValue 不起作用
【发布时间】:2016-02-03 20:33:30
【问题描述】:

我正在 winforms 中动态创建组合框

        ComboBox ddCntrl = new ComboBox();
        ddCntrl.Width = 100;
        ddCntrl.Name="dd_" + tpObj.RowColId;
        ddCntrl.DropDownStyle = ComboBoxStyle.DropDownList;
        Dictionary<int, string> DC = new Dictionary<int, string>();

        DC[-1] = "N/A";
        DC[0] = "Y";
        DC[1] = "N";

        ddCntrl.DataSource = new BindingSource(DC,null);
        ddCntrl.DisplayMember = "Value";
        ddCntrl.ValueMember = "Key";

         ddCntrl.SelectedIndex = ddCntrl.Items.IndexOf("N");
         TableLayoutPanel.Controls.Add(ddCntrl, 1, 1);

我尝试了几个选项来设置选定的值,但没有任何效果

我尝试了以下选项来设置所选值 ddCntrl.SelectedValue =“N”; ddCntrl.SelectedIndex = ddCntrl.FindStringExact("N")

【问题讨论】:

标签: c# asp.net


【解决方案1】:

你需要改变一些东西。首先,如果您在构造函数中使用此代码,则需要将其移至LoadShown 事件。

并在将组合框添加到面板后设置索引。 ddCntrl.FindStringExact("N") 应该可以正常工作:

ComboBox ddCntrl = new ComboBox();
ddCntrl.Width = 100;
ddCntrl.Name = "dd_";
ddCntrl.DropDownStyle = ComboBoxStyle.DropDownList;

Dictionary<int, string> DC = new Dictionary<int, string>();
DC[-1] = "N/A";
DC[0] = "Y";
DC[1] = "N";

ddCntrl.DataSource = new BindingSource(DC, null);
ddCntrl.DisplayMember = "Value";
ddCntrl.ValueMember = "Key";

tableLayoutPanel.Controls.Add(ddCntrl, 1, 1);
ddCntrl.SelectedIndex = ddCntrl.FindStringExact("N");

【讨论】:

  • 谢谢,在将组合框添加到面板后 ddCntrl.SelectedIndex = ddCntrl.FindStringExact("N") 正在工作
【解决方案2】:

由于您绑定到字典,您应该将选定项设置如下:ddCntrl.SelectedItem = DC[1];

如果您想根据显示值进行设置(我真的不建议这样做),您必须在 DC 中找到它,然后将其设置为 ddlCntrl

【讨论】:

  • 它不起作用,我们是否必须与动态创建的控件不同?
  • 哦,我明白了 :) 请在将所选值/项目添加到 tablelayout 后设置任何您想要的值/项目或索引 :))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 2012-12-24
  • 2011-03-30
  • 2016-04-22
  • 2016-10-19
  • 2017-04-15
相关资源
最近更新 更多