【发布时间】:2017-07-18 15:04:30
【问题描述】:
我有一个 C#.net winforms 应用程序,它首先使用实体框架代码连接到 SQL DB。
我的一个组合框丢失了它应该从枚举中提取的值列表(12 个月的列表),它只显示月份列表对象的名称。
发生这种情况是因为我更改了与组合完全无关且不应影响它的代码(将一些不相关的代码移至另一个类),并且似乎导致了上述问题。以前当我添加一些新代码时发生了类似的事情,它导致同样的事情发生。最终,在我更改 linq 查询以在某个值为空时返回“TBC”字符串后,它自行修复。请记住,更改的代码与相关组合框无关。在任何不相关的代码运行之前,也会填充组合。
这是填充组合的代码:
private void UpdateMonthCombo()
{
ArrayList AL = new ArrayList();
foreach (string cs in Enum.GetNames(typeof(MonthsEnum)))
{
MonthList aEnum = new MonthList((int) Enum.Parse(typeof(MonthsEnum), cs), cs);
AL.Add(aEnum);
}
BindingSource source = new BindingSource();
source.DataSource = AL;
comboMonth.ValueMember = "_MonthNumber";
comboMonth.DisplayMember = "_Name";
comboMonth.DataSource = source;
comboMonth.SelectedItem = null;
}
我很想知道这种情况是如何发生的,以及如何解决和预防它。我相信你可以说我对 C# 比较陌生!
非常感谢任何帮助。
这是 MonthList 类:
public class MonthList
{
public string _Name { get; set; }
public int _MonthNumber { get; set; }
public MonthList(int MonthNumber, string Name)
{
_Name = Name;
_MonthNumber = MonthNumber;
}
public enum MonthsEnum : int
{
January = 1,
February = 2,
March = 3,
April = 4,
May = 5,
June = 6,
July = 7,
August = 8,
September = 9,
October = 10,
November = 11,
December = 12
}
}
尝试使用 this 而不是枚举。在单独的表单上测试按预期工作。但在我的表单上它只显示月份数字:
private void UpdateMonthCombo()
{
var monthList = CultureInfo.InvariantCulture.DateTimeFormat.MonthNames.Select((item, index) => new
{
Month = item,
Value = index + 1
});
var result = monthList.Where(m => m.Month != "");
comboMonth.DataSource = result.ToList();
comboMonth.ValueMember = "Value";
comboMonth.DisplayMember = "Month";
}
我重构了组合框上的 selectedindexchanged 事件。它修复了组合框。但现在主网格视图坏了。它似乎与添加组合框列的方法有关。当我注释掉这个方法时,gridview 会显示所有列(没有组合列),但原来的 comboMonth 再次损坏,只显示月份数字:
private void AddProjectCombo()
{
gridBusinessKMs.Columns["Project"].Visible = false;
DataGridViewComboBoxColumn cmbCol = new DataGridViewComboBoxColumn();
cmbCol.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
cmbCol.HeaderText = "Project";
cmbCol.Name = "Project ";
cmbCol.Items.Add("True");
using (var context = new MileageLogDBContext())
{
cmbCol.DataSource = (from p in context.Projects
orderby p.ProjectDescription
select p.ProjectDescription).ToList();
}
gridBusinessKMs.Columns.Add(cmbCol);
gridBusinessKMs.Columns["Project "].DisplayIndex = 1;
}
【问题讨论】:
-
你能添加一些我们可以检查的代码吗,看起来类对象正在与组合而不是类的属性/成员绑定
-
一些特定的代码有助于了解发生了什么。
-
comboMonth.DataSource = 源;这不是数据源对象的名字吗?
-
我已更改为 comboMonth.DataSource = AL;但问题仍然存在。
-
我试过这个:
private void UpdateMonthCombo() { var monthList = CultureInfo.InvariantCulture.DateTimeFormat.MonthNames.Select((item, index) => new { Month = item, Value = index + 1 }); var result = monthList.Where(m => m.Month != ""); comboMonth.DataSource = result.ToList(); comboMonth.ValueMember = "Value"; comboMonth.DisplayMember = "Month"; }...它适用于单独的表单,但当添加到我的原始表单时,它只显示组合中的数字