仅更新datagridview中的一个单元格

时间:2018-12-10 08:53:15

标签: c# datagridview combobox

我正在编写一个监视窗口,该监视窗口从Serial Port获取数据,并在DataGridView中显示变量信息/值。我有一个Timer Event,每500毫秒触发一次,并为每行更新 Value 列。用户可以从组合框选择数据类型,这样他/她就可以观察从变量的行值转换而来的实际值。

enter image description here 当我单击“类型”列中的ComboBox时,将鼠标指针移到与所选 Type 不同的 Type 上,然后稍等片刻(长于500ms) ,Timer Event使Combobox自动将选择内容带入SelectedIndex。我需要将鼠标移到另一个区域并返回到要选择的 Type ,然后在Timer事件自动刷新它之前将其选中。

我怀疑是,我只是在Timer Event中更改了一个单元格(值),但我想它刷新了整个行。因此,如果在Timer Event触发之前没有单击我要选择的类型,它将自动选择当前的SelectedItem。当我不希望刷新ComboBox直到单击并手动选择其中之一时,如何防止刷新它?

这是我的DataTableDataGridView绑定:

BindingSource SBind = new BindingSource();
DataTable WatchDataTable = new DataTable();

public WatchWindowForm()
{
    InitializeComponent();
    initializeDataTable();
    initializeConfigPanel();
}

private void initializeDataTable()
{
    /* Create the DataTable with the same column properties */
    WatchDataTable.Columns.Add(new DataColumn("varName"));
    WatchDataTable.Columns.Add(new DataColumn("varSize"));
    WatchDataTable.Columns.Add(new DataColumn("varValue"));
    WatchDataTable.Columns.Add(new DataColumn("varAddress"));
    WatchDataTable.Columns.Add(new DataColumn("varType"));
    WatchDataTable.Columns.Add(new DataColumn("varDelete"));

    /* Bind the DataTable to the DataGridview (varTable_dgv) */
    SBind.DataSource = WatchDataTable;
    varTable_dgv.DataSource = SBind;
}

这是我的Timer Event

private void WatchTimerEvent(object sender, EventArgs e)
{   
    foreach(DataRow dr in WatchDataTable.Rows)
    {
        /* Search the database using the "Name" cell in the row 
        and find the corresponding local variable  */
        Var_t var = DataBase.LiveVariableDatabase.Find(x => x.name == dr["varName"].ToString());

        /* Get the new value of the variable 
        and write it to the "Value" cell in the DataGridView */
        dr["varValue"] = DataTypes.GetTypedVariable(var);
    }
}

编辑:我意识到,当我尝试读取Type ComboBox的当前值时,它将读取默认值。但是,如果我尝试通过单击按钮读取当前值,它将正确读取当前值。我们是否可以假设从另一个线程访问DataTable有区别?

0 个答案:

没有答案