- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在类中创建了一个组合框,并想为该组合框设置选定值。但是当我这样做时,selectedValue 保持为空,当我尝试设置 selectedIndex 时,我得到一个 ArgumentOutOfRangeException。
代码:
public Control GenerateList(Question question)
{
// Clear the local givenAnswer collection
_givenAnswer.Clear();
// Get a list with answer possibilities
List<QuestionAnswer> answers = question.GetAnswerSort();
// Get a collection of given answers
Collection<QuestionnaireAnswer> givenAnswers = question.GetGivenAnswers();
_givenAnswer = givenAnswers;
ComboBox cmb = new ComboBox();
cmb.Name = "cmb";
cmb.DisplayMember = "Answer";
cmb.ValueMember = "Id";
cmb.DataSource = answers;
cmb.Dock = DockStyle.Top;
// Check an answer is given to the question
if (givenAnswers != null && givenAnswers.Count > 0)
{
cmb.Tag = givenAnswers[0].AnswerId;
cmb.SelectedValue = givenAnswers[0].AnswerId; // answerId = 55, but SelectedValue stays null
}
cmb.SelectedIndex = 1; // For testting. This will throw a ArgumentOutOfRangeException
cmb.DropDownStyle = ComboBoxStyle.DropDownList;
cmb.SelectedIndexChanged += new EventHandler(cmb_SelectedIndexChanged);
return cmb;
}
我希望有人能向我解释发生了什么,这样我就能理解为什么它不起作用。
这是一个完整的小程序,可以说明我的问题。如您所见,它没有设置 SelectedValue,它保持为空
namespace Dynamic_Create_Combo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
GenerateControls gc = new GenerateControls();
Control c = gc.GenerateCombo();
this.SuspendLayout();
this.Controls.Add(c);
this.ResumeLayout(true);
}
}
public class GenerateControls
{
public Control GenerateCombo()
{
// Create datasource
Collection<Car> cars = new Collection<Car>();
Car c = new Car();
c.Id = 1;
c.Name = "Car one";
cars.Add(c);
Car c1 = new Car();
c1.Id = 2;
c1.Name = "Car two";
cars.Add(c1);
Car c2 = new Car();
c2.Id = 2;
c2.Name = "Car three";
cars.Add(c2);
ComboBox cmb = new ComboBox();
cmb.DropDownStyle = ComboBoxStyle.DropDownList;
cmb.DataSource = cars;
cmb.DisplayMember = "Name";
cmb.ValueMember = "Id";
cmb.SelectedValue = 2;
return cmb;
}
}
public class Car
{
private int _id;
private string _name;
public int Id
{
get { return _id; }
set { _id = value; }
}
public string Name
{
get { return _name; }
set { _name = value; }
}
}
}
最佳答案
您已将值成员设置为“Id”,但您正在尝试使用“AnswerId”作为所选值。
没有更多细节,很难说为什么设置 SelectedIndex
会抛出 ArgumentOutOfRangeException
- 也许组合框会忽略所有没有“Id”属性的值, 因此没有给你任何值,所以选择索引 1 是不可能的?
编辑:好的,看起来它只是在可见时才实际进行绑定(bind) - 或者在过程的某个阶段。我已经尝试了一些方法来加速这个过程,但它们似乎没有帮助。您可以做的是推迟您的选择:
EventHandler visibleChangedHandler = null;
visibleChangedHandler = delegate {
cmb.SelectedIndex = 2;
cmb.VisibleChanged -= visibleChangedHandler; // Only do this once!
};
cmb.VisibleChanged += visibleChangedHandler;
这是一个丑陋的解决方法,但它至少应该可以帮助您暂时开始。
关于C# 为什么不能设置动态创建的组合框的 selectedValue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3201340/
我正在尝试将 ComboBox SelectedValue 绑定(bind)到 string。 Binding 完美运行。但是,我的 ComboBoxItem 的 IsSelected 之一设置为 T
我有一个 WebForms 页面,上面有两个 DropDownList 控件,它们都包含 60-80 度的温度范围,一个用于加热,另一个用于冷却。它们在 .aspx 中声明为: 每个列表的值都使用
我有一个带有项目A,B,C,D,E的ComboBox。 用户选择后如何更改组合框的SelectedValue,因此,如果用户从列表项“A”中选择,则SelectedValue将为“D”(就像他自己选择
我在一个项目中使用 flex 4.0 和 ZK 框架。 我有 4 个状态,这些状态中有 3 个单选按钮组。 其中 2 个处于第一状态,其中 1 个处于第四状态。 我的问题是,我可以像这样获取前 2 个
问题很奇怪,我有一个组合框,它通过 DataSource 属性正确地填充了项目(它绑定(bind)到一个 bindingSource 项目,它包含一个显示成员和一个值成员),这是一个允许我选择供应商的
我在类中创建了一个组合框,并想为该组合框设置选定值。但是当我这样做时,selectedValue 保持为空,当我尝试设置 selectedIndex 时,我得到一个 ArgumentOutOfRang
我有一个连接到 ObjectDataSource 的 DropDownList。在我的页面加载中,我根据情况将 selectedvalue 设置为特定值。如何在我的方法 selectedindexch
我已经查看了一些解决方案,但对我来说还没有任何效果。 我正在为这个项目使用 MVVM,并且有一个无法设置 SelectedItem 属性的 ListView。 如果这是我的(简化的)XAML。
我在下拉列表方面遇到了一些问题,我需要将初始值传递给 View 模型,因此下拉列表将填充已选择的值。 据我所知(参见 this fiddle ): var additionalTravellersDe
我正在尝试根据查询字符串中传递的值来设置未绑定(bind)的 DropDownList 的值。这是我的代码: ListItem item = null; for (int x
对于我正在尝试构建的简单练习题,我的代码是这样的。我遇到了 Invalid Cast Exception. Specified Cast is not valid. public Form1() {
没有发布我的全部代码(我只是发布了有问题的脚本),我遇到了一个问题,似乎很多人都遇到过,但我的似乎没有响应其他推荐的修复程序。我在 VS2008 中使用 C#。 基本上我有一个组合框,当更改项目初始化
我有一个功能区组合框(MS Ribbon OpenSource 项目,.Net 4.0),它是数据绑定(bind)到我的 View 模型的属性,如下所示: XAML:
如果下拉列表在范围内,我如何设置下拉列表的选定值Gridview 和下拉列表在编辑时由 objectdatasource 填充按钮被点击? 我的应用发生了什么情况是下拉列表被填充但第一项始终显示为选定
drpDwnLstBillContact.SelectedValue = billContactId.ToString(); drpDwnLstRegContact.SelectedValue =
这段代码有什么问题? myComboBox.Items.Clear(); myComboBox.Items.AddRange(new string[]{"one","two"}); myComboBo
我整理了以下代码来演示我遇到的问题。 这是一个只有组合框的表单,在加载方法中使用从 LINQ 生成的数组填充组合框。 它设置了 DisplayMember 和 ValueMember。显示成员按预期工
我有一个在表单加载时填充的 ComboBox。我以数据集的形式从数据库中获取数据,并使用以下内容填充组合框。 checkBox4_combo.DataSource = ds.Tables[0].Def
所以我正在连接一个sql数据库。我有一个 asp.net 页面,当用户选择状态下拉列表并选择已关闭的值,然后单击更新票证按钮时,我需要它来更新表中的 Closed_date 列。 我的表有列 Clos
我正在尝试将对象添加到组合框中并使用 SelectedValue 属性来选择组合框中的项目,但它不起作用:SelectedValue 在作业。 class ComboBoxItem
我是一名优秀的程序员,十分优秀!