【问题标题】:Keeping a current list of running processes using a DataGridView?使用 DataGridView 保持当前正在运行的进程列表?
【发布时间】:2014-04-17 08:30:09
【问题描述】:

我正在尝试在 C# 中制作一个类似于任务管理器的程序。我目前的方法是在应用程序启动时获取进程列表,然后如果用户按下“更新”按钮,则获取一个新列表。我想在我的控件中保留一个当前列表,并“保存”用户选择的位置,而不是选择和重置滚动条。在 C# 中这样做的正确方法是什么?

这是我当前更新控件的方式:

public void UpdateForm()
{
    processGridView.Rows.Clear();
    Process[] processes = Process.GetProcesses();

    for (int i = 0; i < processes.Length; ++i)
    {
        processGridView.Rows.Add();
        processGridView.Rows[i].Cells["processName"].Value = processes[i].ProcessName + ".exe";
        processGridView.Rows[i].Cells["processID"].Value = processes[i].Id;
    }
}

【问题讨论】:

  • 当您使用此代码时会发生什么?您需要提供错误让我们解决。除此之外,这段代码看起来不错。
  • 这段代码中的问题是,如果我尝试运行一个计时器来每隔一段时间调用这个函数,DataGridView 就会出现痉挛,并且单元格会无缘无故地重新调整。滚动条也被重置,使它看起来一团糟。我需要帮助弄清楚如何在不每次都重置整个控件的情况下刷新列表。

标签: c# windows datagridview process


【解决方案1】:

您在评论中提到真正的问题在于GridView 的刷新。我建议你看看使用data binding

编辑更多代码。但是请阅读有关数据绑定的信息。 Here 是有关 DataSource 属性的 msdn 页面。注意不需要sql数据库对象,可以绑定一个简单的列表。

然后,当您的计时器计时并且您有新数据时,重置网格视图数据和绑定。我发现重置也会重置滚动条,所以我添加了来自this question 的代码以保持滚动偏移固定。这不是很好,因为鼠标在刷新期间失去了对滚动条的控制。我会让你想出一个更好的解决方案。

public Form1()
{
  InitializeComponent();

  OnRefreshGrid(null, null);
  Timer ticker = new Timer();
  ticker.Interval = 250;
  ticker.Tick += OnRefreshGrid;
  ticker.Start();
}

void OnRefreshGrid(object sender, EventArgs e)
{
  BindingSource source = new BindingSource();
  var table = new DataTable("Process List");

  Process[] processes = Process.GetProcesses();

  table.Columns.Add("Name");
  table.Columns.Add("Id");

  for (int i = 0; i < processes.Length; ++i)
  {
    table.Rows.Add(new object[] { processes[i].ProcessName + ".exe", processes[i].Id });
  } 

  table.AcceptChanges();
  source.DataSource = table;

  int scroll = dataGridView1.FirstDisplayedScrollingRowIndex;
  dataGridView1.DataSource = source;

  if (scroll != -1)
    dataGridView1.FirstDisplayedScrollingRowIndex = scroll;
}

【讨论】:

    猜你喜欢
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    相关资源
    最近更新 更多