【问题标题】:Automatically update a datagridview自动更新数据网格视图
【发布时间】:2014-10-22 12:12:29
【问题描述】:

表单中的数据网格视图从列表中填充 我有一个带有从列表填充的datagridview 的表单。 当我点击每一行的用户按钮时,应该会出现一个数据网格中的用户列表

新表单上的数据网格由我传递的列表更新,当我点击用户按钮时,会发生这种情况:

 GetUserDescriptorDetails gtUserDetails = new GetUserDescriptorDetails(name, xmlData, CreateListDynamically(name));
 gtUserDetails.ShowDialog();

CreateListDynamically 方法是这样的:

 public BindingList<xml.UserDescriptor> CreateListDynamically(string _name)
    {
        foreach (xml.UserDescriptor dbList in xmlData.Users)
        {
            if (dbList.DatabaseDescriptorName == _name)
            {
                users.Add(new xml.UserDescriptor() { DatabaseDescriptorName = dbList.DatabaseDescriptorName, Username = dbList.Username, Password = dbList.Password, IsAdmin = dbList.IsAdmin });
            }

        }
        return users;
    }

现在列表很好,但是每次我单击“用户”按钮时,行都会重复,因为 users.Add。我该如何解决这个问题? 我添加值只是为了填充列表,有没有其他方法可以获取具有条件的列表:

dbList.DatabaseDescriptorName == _name

【问题讨论】:

  • xmlData.Users的定义是什么?
  • 是这样的:public List Users { get;放; }

标签: c# datagridview datagrid


【解决方案1】:

在您的 CreateListDynamically(string _name) 方法中,您永远不会清除以前的 users 列表,这就是您得到重复的原因。
foreach 循环之前添加users.Clear(),重复应该会消失。

这一切都假定users 是一个类变量,因为我没有看到它作为变量传递到方法中

您还可以做的是完全解耦users 变量,并在您的方法中为您的结果集提供一个临时变量:

public BindingList<UserDescriptor> CreateListDynamically(string _name)
{
  return new BindingList<UserDescriptor>(xmlData.Users.FindAll(x => x.DatabaseDescriptorName == _name));
}

【讨论】:

  • 谢谢,但我需要在表单中添加新用户,当我清除它时不会保存值
  • 到底有没有使用 where 条件来获取具有该条件的列表?
  • 查看我对将users 与方法解耦的答案的补充
  • 谢谢,但它并没有真正解决它,我可以做这个工作吗?
  • BindingList dummy = users.Where(x => x.DatabaseDescriptorName == _name).ToList();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多