Как я могу получить результат при выходе из ячейки представления сетки данных?

Вот мой код, который отображает умножение значений столбца Rate * Supply и назначает его столбцу Amount в представлении сетки данных:

try
{
Query = "Select  id,Code,Description,Rate,Cust_Id,Supply,Empty,Amount,Received from Items where Cust_Id='" + GlobalVars.id + "'";
adap = new SQLiteDataAdapter(Query, GlobalVars.conn);
ds = new DataSet();
adap.Fill(ds, "Items");
dtgVOuchers.DataSource = ds.Tables[0];
dtgVOuchers.Columns["Cust_Id"].Visible = false;
dtgVOuchers.Columns["id"].Visible = false;
ds.Tables[0].Columns["id"].AutoIncrement = true;
ds.Tables[0].Columns["id"].AutoIncrementSeed = itmcount + 1;
ds.Tables[0].Columns["id"].AutoIncrementStep = 1;
ds.Tables[0].Columns["Cust_Id"].DefaultValue = GlobalVars.id;

dtgVOuchers.Columns["Code"].ReadOnly = true;
dtgVOuchers.Columns["Description"].ReadOnly = true;
dtgVOuchers.Columns["Rate"].ReadOnly = true;
dtgVOuchers.Columns["Amount"].ReadOnly = true;
 foreach (DataGridViewRow row in dtgVOuchers.Rows)
  {
   row.Cells[dtgVOuchers.Columns["Amount"].Index].Value = (Convert.ToDouble(row.Cells[dtgVOuchers.Columns["Rate"].Index].Value) * Convert.ToDouble(row.Cells[dtgVOuchers.Columns["Supply"].Index].Value));

  } 
 dtgVOuchers.Refresh();
}

Это умножение выполняется, если я дважды щелкну ячейку «Сумма» в представлении сетки данных и получу результирующую сумму в соответствующей ячейке. Я хочу получить результат умножения в соответствующей ячейке в событии выхода из ячейки. Это означает, что когда пользователь покидает ячейку «Предложение» или «Коэффициент», введя значение, тогда это событие обеспечивает обновление соответствующей ячейки «Сумма», чтобы пользователь не Не нужно дважды щелкать по ячейке, где он хочет получить результат. Может ли кто-нибудь помочь мне, как я могу это сделать?


person user3012262    schedule 30.11.2013    source источник


Ответы (1)


Вместо этого вы должны обработать CellValueChanged, хотя обработка этого события может дать вам тот же эффект (если пользователь изменяет значение ячейки через пользовательский интерфейс, CellValueChanged запускается только после изменения значения ячейки и потери фокуса):

private void dtgVOuchers_CellValueChanged(object sender, DataGridViewCellEventArgs e){
  var cell = dtgVOuchers[e.ColumnIndex, e.RowIndex];
  if(cell.OwningColumn.Name == "Rate" || cell.OwningColumn.Name == "Supply"){
    //update the Amount cell
    cell.OwningRow.Cells["Amount"].Value = Convert.ToDecimal(cell.OwningRow.Cells["Rate"].Value) *
                                          Convert.ToDecimal(cell.OwningRow.Cells["Supply"].Value);
  }
}

Я предполагаю, что тип значения ячейки «Сумма» — decimal, вы можете изменить Convert.ToDecimal на соответствующий преобразователь типа данных.

person King King    schedule 30.11.2013
comment
@user3012262 да, это автоматически, вам просто нужно зарегистрировать его с событием CellValueChanged по этому коду: dtgVOuchers.CellValueChanged += dtgVOuchers_CellValueChanged; - person King King; 30.11.2013