【问题标题】:display data from database in datagridview with entity framework in c#在 c# 中使用实体框架在 datagridview 中显示数据库中的数据
【发布时间】:2014-11-09 00:23:34
【问题描述】:

我使用 Empty Web Application 作为我的主机,并且我有不同的类,例如其中的用户。

我还有一个客户端(Windows 窗体应用程序)。 请注意这是实体框架数据库!

好的,事情就是这样。我想在 datagridview 中显示每一个数据(ID、名称等的单独列...)

在我的 Empty Web 应用程序中,我有 Webservice,其中有用于显示用户的代码。

这里是代码

[WebMethod]
    public List<string> getUsers()
    {
        List<string> userList = new List<string>();
        using (var db = new Database())
        {
            var query = from x in db.userList
                            orderby x.UserID
                            select x;

            foreach (var user in query)
            {
                userList.Add(user.userID + user.Name); //also some other information, but doesnt really matter here
            }
        }
        return userList;
    }

好的,转到 Windows 窗体应用程序(客户端)。

现在我需要在 datagridview 中显示这些数据(在单独的列中),意思是:

userID 显示在 ID 列中 名称显示在名称列中

这里是出现问题的地方。所有数据都显示在每一列中。 用户 ID + 名称显示在 ID 列中

我的代码

ServiceReference1.mojWebServiceSoapClient client = new ServiceReference1.mojWebServiceSoapClient();

        var userL = client.pridobiUporabnike();

        foreach (string user in userL)
        {
            string[] row = new string[6];
            row[0] = user;
            row[1] = user;
            row[2] = user;
            row[3] = user;
            row[4] = user;
            row[5] = user;               
            dataGridView1.Rows.Add(row);
        }

你会说“当然,当你到处都有“用户”时,它会显示相同的数据。我知道......我尝试了很多东西,但不知何故我就是无法让它工作。

我认为代码应该类似于 row[0] = user.UserID; row1 = 用户名;

请大家帮我解决这个问题,我真的很感激它

非常感谢任何提供意见的人。

我还包括运行程序的结果。

【问题讨论】:

    标签: c# entity-framework web-services datagridview webmethod


    【解决方案1】:

    您正在返回一个列表,其中每个用户只能包含一个值,在您的情况下,您将 id 和 name 字段分配给该属性。

    您应该包含一个单独的类,您将根据您的要求填充值,然后返回该类的列表或集合。

    [DataContract]
    public class Userdata
    {
        public Userdata(int id, string name, string surname, string number, string mobile, string email)
        {
            this.Id = id;
            this.Name = name;
            this.Surname = surname;
            this.Number = number;
            this.Mobile = mobile;
            this.Email = email;
        }
    
        [DataMember]
        public int Id { get; set; }
    
        [DataMember]
        public string Name { get; set; } 
    
        [DataMember]      
        public string Surname { get; set; }
    
        [DataMember]
        public string Number { get; set; }
    
        [DataMember]
        public string Mobile{ get; set; } 
    
        [DataMember]      
        public string Email{ get; set; }
    }
    
    public List<Userdata> getUsers()
        {
            var userList = new List<Userdata>();
            using (var db = new Database())
            {
                var query = from x in db.userList
                            orderby x.UserID
                            select x;
    
                foreach (var user in query)
                {
                    userList.Add(new Userdata(user.id, user.name, user.surname, user.number, user.mobile, user.email));
                }
            }
            return userList;
        }
    

    我认为这个小例子应该能让你朝着正确的方向前进。

    我看到您正在使用 Web 服务,然后您应该使用一些属性来装饰您的 dto(数据传输对象)类。请参阅 UserData 类的属性。

    最后对于您的客户端代码,虽然有很多方法可以设置数据网格,但我会坚持使用您目前拥有的方法。更改后您应该能够按如下方式设置网格。

    var userL = client.pridobiUporabnike();
    
        foreach (string user in userL)
        {
            string[] row = new string[2];
            row[0] = user.Id;
            row[1] = user.Name;              
            dataGridView1.Rows.Add(row);
        }
    

    【讨论】:

    • 哦等等...现在它说“UserData 不包含带有 6 个参数的构造函数”。是的,我班上有 6 个。
    • 好的,我发现了问题所在。是否可以这样做 (public Userdata(int id, string name) { this.Id = id; this.Name = name; } 以任何其他方式?如果我这样做,我只是在代码的其他地方遇到问题,因为不同方法。
    • 嗨 Fox,您可以简单地更改它接受 6 个参数的构造函数,或者您可以简单地实例化类的变量并单独设置属性。我将以更新我的答案为例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多