0

好的,我有一些看起来像这样的东西:

公司名称-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;
        };
4

2 回答 2

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 相关还是与数据绑定相关。

于 2012-05-04T18:30:49.897 回答
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());
    }
}
于 2012-05-04T18:56:25.383 回答