好的,我有一些看起来像这样的东西:
公司名称-1234
我只希望名称在组合框中供用户选择,因为在这种情况下不需要使用短划线后跟数字。
继承我的代码,用Linq查询数据库,然后删除破折号之后的所有内容,但它看起来似乎是用任何东西填充组合框。
using (context ctx = new context())
{
List<companyinformation> compInf = new List<companyinformation>();
var getCompanies = (from c in ctx.companyinformations
select c.name).ToList();
foreach (var n in getCompanies)
{
compInf.Add(new companyinformation() { name = Remove(n.LastIndexOf('-')) });
}
cbModClient.DataSource = compInf;
cbModClient.DisplayMember = "name";
cbModClient.SelectedIndex = -1;
};
我刚试过这段代码并且它工作正常,我认为是因为我这次使用了“ - ”而不是“ - ”。
using (context ctx = new context())
{
List<companyinformation> compInf = new List<companyinformation>(ctx.companyinformations);
var getCompanies = (from c in compInf
where c.name.Contains("-")
select c.name.Substring(0, c.name.LastIndexOf("-"))).ToList();
cbModClient.DataSource = getCompanies;
cbModClient.DisplayMember = "name";
cbModClient.SelectedIndex = -1;
};
答案 0 :(得分:2)
您绑定到getCompanies
结果集合,但您已执行字符串操作并将其添加到compInf
。
cbModClient.DataSource = compInf;
也许是一种较短的方式:
var companyNames = ctx.companyinformations
.Select(c=> new {FormattedName =
c.name.Substring(0,c.name.LastIndexOf('-'))
.Trim()})
.ToList();
cbModClient.DataSource = companyNames;
cbModClient.DisplayMember = "FormattedName";
cbModClient.ValueMember = "FormattedName";
考虑在DataSource赋值上放置一个断点,并检查/确保您的变量确实具有您期望的值。这将决定您的问题是否与LINQ相关,或与数据绑定相关。
答案 1 :(得分:0)
我无法复制“仍然没有项目出现”问题。这是一个有效的等效程序。
假设您确实从数据库中获得了结果并且没有抛出任何异常,剩下的问题是:您的ComboBox有何不同?
using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
class Form1 : Form
{
class CompanyInfo
{
public string Name { get; set; }
}
static string RemoveTrailingDash(string value)
{
int dashIndex = value.LastIndexOf('-');
if (dashIndex > 0)
return value.Substring(0, dashIndex).TrimEnd();
return value;
}
public Form1()
{
var companies = new CompanyInfo[]
{
new CompanyInfo { Name = "Ajax - 1200" },
new CompanyInfo { Name = "Bermuda Corp - 1" },
new CompanyInfo { Name = "Capitol Inc" },
new CompanyInfo { Name = "Dash LLC - " },
};
Controls.Add(new ComboBox
{
Location = new Point(10, 10),
DropDownStyle = ComboBoxStyle.DropDownList,
DataSource = companies.Select(c => new { FormattedName = RemoveTrailingDash(c.Name) }).ToList(),
DisplayMember = "FormattedName",
});
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}