【问题标题】:How to Populate ListBox with Linq to Sql C#如何使用 Linq to Sql C# 填充 ListBox
【发布时间】:2015-11-26 01:42:30
【问题描述】:

我有一个问题,即如何使用数据库中的数据填充列表框,而无需 db 列和大括号 这是我的代码:

var db = new DataClasses1DataContext();
        var history =( from a in db.ResultsHistories
            where
                a.PlayerOne == _playerOne && a.PlayerTwo == comboBox.Text ||
                a.PlayerTwo == _playerOne && a.PlayerOne == comboBox.Text
            select new
            {
                a.PlayerOne,
                a.PlayerTwo,
                a.Date,
                a.ResultOne,
                a.ResultTwo
            }).ToList();

        listBox.ItemsSource = history;

结果: 我只想要这些列中的数据。

【问题讨论】:

    标签: c# wpf linq-to-sql


    【解决方案1】:

    请看这里的答案: Multicolumn ListBox in WPF

    您也可以为此目的使用 DataGrid。 相应的 XAML 代码是:

    <DataGrid x:Name="NamesDataGrid"></DataGrid>
    

    还有一个非常简单的代码:

    public partial class MainWindow : Window
    {
        private readonly List<Name> _nameList = new List<Name>
        {
            new Name("Eric","Clapton"),
            new Name("Mark", "Knopfler")
        };
        public MainWindow()
        {
            InitializeComponent();
            NamesDataGrid.ItemsSource = _nameList;
        }
    }
    
    internal class Name
    {
        public Name(string firstName, string lastName)
        {
            FirstName = firstName;
            LastName = lastName;
        }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    

    看起来像这样:

    【讨论】:

      【解决方案2】:

      如果你试图返回一个新对象,你必须告诉它属性为

      select new {PlayerOne = a.PlayerOne
                  //More Properties Here
                 }
      

      所以根据你的例子可能看起来像

      var db = new DataClasses1DataContext();
          var history =( from a in db.ResultsHistories
              where
                  a.PlayerOne == _playerOne && a.PlayerTwo == comboBox.Text ||
                  a.PlayerTwo == _playerOne && a.PlayerOne == comboBox.Text
              select new
              {
                  PlayerOne = a.PlayerOne,
                  PlayerTwo = a.PlayerTwo,
                  Date = a.Date,
                  ResultOne = a.ResultOne,
                  ResultTwo = a.ResultTwo
              }).ToList();
      
          listBox.ItemsSource = history;
      

      这将返回一个没有类型但属性将在那里的新对象列表

      编辑: 如果您想要 PlayerOne 和 PlayerTwo 等于文本框值的表中的所有数据,只需执行

      var history = db.ResultsHistories.Where(x => x.PlayerTwo == comboBox.Text || x.PlayerOne == comboBox.Text).Select(x => x).ToList();
      

      【讨论】:

      • 我已经尝试了你的建议,但它不起作用。我只想获取 db 表的数据,而不是获取 {}、= 和列名。
      • 所以不管你想要所有数据?
      • 没错,但只有 PlayerOne、PlayerTwo 等数据。没有大括号和 = 或列名
      • 在db中显示Classname.TableName
      • 在运行时,listBox显示QuizGame.ResultHistory(class.tablename)没有任何数据
      【解决方案3】:

      尝试添加这个

      • ", " + 语句之间

        a.PlayerOne+ ", " +a.PlayerTwo+ ", " + a.Date+ ", " + a.ResultOne+ ", " + a.ResultTwo

      会起作用的

      【讨论】:

        猜你喜欢
        • 2019-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多