c# - 我想自动选择具有值的组合框
问题描述
你能告诉我如何解决这个问题吗?
我想用值表单数据库自动选择组合框进行显示(而不是用文本选择)。
将值和文本添加到 ComboBox
public void ComBoList(JArray Data)
{
comboBoxBrand.Items.Clear();
comboBoxSize.Items.Clear();
comboBoxPCBrand.Items.Clear();
comboBoxProductOf.Items.Clear();
comboBoxBrand.DisplayMember = "Text";
comboBoxBrand.ValueMember = "Value";
comboBoxSize.DisplayMember = "Text";
comboBoxSize.ValueMember = "Value";
comboBoxPCBrand.DisplayMember = "Text";
comboBoxPCBrand.ValueMember = "Value";
comboBoxProductOf.DisplayMember = "Text";
comboBoxProductOf.ValueMember = "Value";
JArray AllData = JArray.Parse(Data.ToString());
int JCount = AllData.Count;
for (int i = 0; i <= (JCount - 1); i++)
{
foreach (var Values in AllData[i])
{
if (i == 0)
{
int BId = int.Parse(Values["HddBrandId"].ToString());
comboBoxBrand.Items.Add(new { Text = Values["BrandName"].ToString(), Value = BId });
}
else if (i == 1)
{
int SId = int.Parse(Values["SizeId"].ToString());
comboBoxSize.Items.Add(new { Text = Values["Size"].ToString(), Value = SId });
}
else if (i == 2)
{
int PId = int.Parse(Values["PCBrandId"].ToString());
comboBoxPCBrand.Items.Add(new { Text = Values["BrandName"].ToString(), Value = PId });
}
else if (i == 3)
{
int CId = int.Parse(Values["CountryId"].ToString());
comboBoxProductOf.Items.Add(new { Text = Values["CountryName"].ToString(), Value = CId });
}
}
}
}
从数据库中选择具有值的组合框:
comboBoxBrand.SelectedValue = Data.BrandId; // int Data from Database
comboBoxSize.SelectedValue = Data.SizeId; // int Data from Database
comboBoxPCBrand.SelectedValue = Data.PCBrandId; // int Data from Database
comboBoxProductOf.SelectedValue = Data.ProductOfId; // int Data from Database
请帮我。
谢谢你。
解决方案
DisplayMember 和 ValueMember 在使用数据绑定填充组合框时使用(通过将.DataSource
属性设置为可绑定集合)
不要将东西放入您的组合.Items
集合中,而是将它们放入列表中,将 设置.DataSource
为列表,然后在设置时,如果您设置的值等于列表项的属性.SelectedValue
之一的值,它将从列表中选择一个项目.Value
为此,使用 ValueTuple (或完整类)之类的东西可能比使用匿名类型更容易,但是可以绑定匿名类型,你只需要一个小提琴来为它创建一个列表,也许
var listToBind = new int []{}.Select(s=> new{ Text = "", Val=0}).ToList();
这将为您提供一个List<anonymoustype<string,int>>
可以加载匿名类型项目的位置.. 然后您可以将组合 DataSource 设置为它,并且事情应该按您的预期工作.. 虽然通过 SelectedItem 将它们取出会返回一个包裹匿名类型的对象,你将很难使用它(我的投票;为 DisplayValue 对创建一个适当的类,或者使用一个元组,或者已经存在的东西,比如KeyValuePair<T,T2>
推荐阅读
- neural-network - PyTorch Net.train() 无法建立连接 - 为什么?
- javascript - 重新排列 Flatlist 项目而不重新加载 React Native
- r - quantstrat 封装股票函数:错误:C 堆栈使用量太接近限制
- javascript - WEB AUDIO API 产生雨噼啪声
- swagger - .net core 3.1 升级:DataContract 和 DataMember - 无法隐藏字段
- django - 使用多个模型获取响应
- ruby-on-rails - 渲染后,浏览器不刷新页面
- python - 我创建的函数不会将结果保存到文本文件
- typescript - 装饰器不推断类型
- haskell - 除了 as-pattern,@在 Haskell 中还有什么含义?