简体   繁体   English

Datagridview 仅更新最后一行

[英]Datagridview updating just last row

  1. I have a folder in shared drive containing xml files.我在共享驱动器中有一个文件夹,其中包含 xml 文件。
  2. The file gets clubbed into a single data for live monitoring该文件被合并为单个数据以进行实时监控
  3. The FilesystemWatcher listen to last modified time and load the file in to main datatatable or merges it. FilesystemWatcher 监听最后修改时间并将文件加载到主数据表或合并它。
  4. The datagridview rowcell should appear should display the color on the basis country.应出现的 datagridview 行单元应显示基于国家/地区的颜色。
  5. I have no problem in clubbing the file and doing other stuffs except the color part in the datagridview.除了datagridview中的颜色部分之外,我在合并文件和做其他事情方面没有问题。
  6. The problem is that the below code while loading the file datagridveiw rows do changes the color of the cell but when it finishes loading, only last datagridview row shows the colored cell.问题是下面的代码在加载文件 datagridveiw 行时会改变单元格的颜色,但是当它完成加载时,只有最后一个 datagridview 行显示彩色单元格。
  7. on the top of that, if user sorts the datagridview column, all cells loses their color format including the last one最重要的是,如果用户对 datagridview 列进行排序,所有单元格都会丢失其颜色格式,包括最后一个
  8. Can anyone tell me what I am doing wrong or how to fix it?谁能告诉我我做错了什么或如何解决?
private void Read_Summary_XML()
{
  String[] country_array = new[] { "US", "Russia", "United Kingdom", "Cananda" };
  Color[] color_array = new Color[] { Color.FromArgb(53, 255, 51), Color.FromArgb(51, 204, 51), Color.FromArgb(255, 153, 0), Color.FromArgb(255, 153, 0) };
  List<String> direcotries_list = new List<String>(Directory.EnumerateDirectories(log_folder));
  foreach (String directory in direcotries_list)
  {
    String xml_file = Path.Combine(directory, "summary.xml");
    using (XmlReader xml_reader = new XmlNodeReader(Read_XML_File(xml_file)))
    {
      DataTable dt = new DataTable();
      dt = summary_dt.Clone();
      dt.ReadXml(xml_reader);
      summary_dt.Merge(dt);
      String country = dt.Rows[0]["country_clm"].ToString();
      DataGridViewRow row = (from dgv_row in summary_dgv.Rows.Cast<DataGridViewRow>()
                             where dgv_row.Cells["country_clm"].Value.ToString().Equals(country)
                             select dgv_row).First();
      Int32 ri = row.Index;
      row.Cells["country_clm"].Style.BackColor = color_array[Array.IndexOf(country_array, country)];

    }
 color_array = null; country_array = null;
 }
}

I have managed to find the solution.我设法找到了解决方案。 Add cell formatting event listener in form load event.在表单加载事件中添加单元格格式化事件监听器。

this.summary_dgv.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.DGV_Cell_Formatting);

private void DGV_Cell_Formatting(object sender, DataGridViewCellFormattingEventArgs e)
{
  if (summary_dgv.Columns[e.ColumnIndex].Name == "country_clm")
  {
     String[] country_array = new[] { "US", "Russia", "United Kingdom", "Cananda" };
     Color[] color_array = new Color[] { Color.FromArgb(53, 255, 51), Color.FromArgb(51, 204, 51), Color.FromArgb(255, 153, 0), Color.FromArgb(255, 153, 0) };

     summary_dgv.Rows[e.RowIndex].Cells["country_clm"].Style.BackColor = color_array[Array.IndexOf(country_array, e.Value)];
     color_array = null; country_array = null;
   }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM