更改C#列表视图中列中特定单元格的值

时间:2018-01-13 22:20:36

标签: c# windows listview

[C#中的列表视图] [1]

如何在一行中使用值列中的更改值仅在C#中?  [1]:https://i.stack.imgur.com/Wt2CM.png图片 或者如何在列值中获取特定单元格?

我想在列值中添加一行值更改? 当应用程序运行时,列表视图会逐行添加新行值,我想添加一行ID,名称,类型和值,以便稍后选择。

示例图片: 只有红色框中的值才会改变

  

[1]:https://i.stack.imgur.com/ofBE6.png [2]:   https://i.stack.imgur.com/dismy.png [3]:   https://i.stack.imgur.com/QH0Vj.png

代码

public partial class Form1 : Form
{
    string r, rr, rrr;

     private void timer2_Tick(object sender, EventArgs e)
    {
        ListViewItem lvi = new ListViewItem("1");
        lvi.SubItems.Add(r);
        lvi.SubItems.Add(rr);
        lvi.SubItems.Add(rrr);
        listView1.Items.Add(lvi);

    }

    public Form1()
    {
        InitializeComponent();

    }

      private void timer1_Tick(object sender, EventArgs e)
    {
        Computer cp = new Computer();
        cp.Open();
        cp.GPUEnabled = true;
        cp.CPUEnabled = true;
        cp.RAMEnabled = true;
        cp.MainboardEnabled = true;


        foreach (var hardware in cp.Hardware) // get Hardware in pc
        {



            if (hardware.HardwareType == HardwareType.RAM)
            {
                hardware.Update();
                foreach (var senR in hardware.Sensors) //<== all sensor in ram
                {

                    if (senR.SensorType == SensorType.Load) // <== 1 sensor RAM usage
                    {   
                        Console.WriteLine("RAM: " + Convert.ToInt32(senR.Value) + " %");
                          r = senR.Name.ToString(); // sensor name
                         rr = senR.SensorType.ToString(); // sensor type
                        rrr = senR.Value.ToString(); // sensor value

                    }


                    }

                }

            }



}}

我可以使用listview的替代方案吗?

1 个答案:

答案 0 :(得分:0)

假设您的r是唯一值,您可以检查是否有匹配的记录:

private void timer2_Tick(object sender, EventArgs e)
{

    bool exists = false;
    foreach (ListViewItem lvi in listView1.Items)
    {
        if ( lvi.SubItems(1).Text == r )
        {
            exists = true;
            lvi.SubItems(2).Text = rr;
            lvi.SubItems(3).Text = rrr;
        }
    }

    if (!exists )
    {
    ListViewItem lvi = new ListViewItem("1");
    lvi.SubItems.Add(r);
    lvi.SubItems.Add(rr);
    lvi.SubItems.Add(rrr);
    listView1.Items.Add(lvi);
    }

}

这是可行的,但老实说,我认为你应该更新DataTable和DataGridView。 DataTable可以有一个唯一的列,您可以在源上进行检查查找,而不是在GUI上进行查找。