【问题标题】:DataGridView cell edit end eventDataGridView 单元格编辑结束事件
【发布时间】:2012-06-14 07:18:34
【问题描述】:

我有一个 DataGridView,其中有一列“总计”。 DataGridView 是可编辑的。在网格视图下方,我有一个文本框,其中我想要网格的“总计”列的总数。我所做的是,当用户进入网格中的总列时,它会反映到网格视图下方的总文本字段中。为了在文本字段中显示总计,我添加了网格视图的总计列。但问题是,如果我第一次进入网格视图的总列,它会立即反映到下面的文本字段中。但是,如果我在 DataGridView 的总列中编辑相同的值,则网格下方的文本字段会将其与以前的值相加,我希望在文本字段中添加新的编辑值。如何解决这个问题?以下是代码:-

private void grdCaret_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    try
    {  
        string value = grdCaret.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
        if (e.ColumnIndex == 1)
        {
           // int val = int.Parse(value);
           // quantity = val;
           // ekundag = ekundag + quantity;
           //tbTotDag_cr.Text =ekundag.ToString();

            int quantity = 0;

            foreach (DataGridViewRow row in grdCaret.Rows)
                quantity +=(int) grdCaret.Rows[e.RowIndex].Cells[1].Value.ToString();
                //quantity +=(int) row.Cells[1].Value;

            tbTotDag_cr.Text = quantity.ToString();
        }

        if (e.ColumnIndex == 2)
        {
            float val = float.Parse(value);
            total = val;
            ekunrakam = ekunrakam + total;
            tbTotPrice_cr.Text = ekunrakam.ToString();
        }
        grdCaret.Columns[3].ReadOnly = false;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString());
    }
}

【问题讨论】:

  • 您能在这里提供您的单元格编辑事件处理程序代码吗?
  • Totals 的运行情况如何,请输入代码

标签: c# .net winforms datagridview


【解决方案1】:

使用CellEndEdit 事件更新您的总价值:

private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    int total = 0;

    foreach (DataGridViewRow row in dataGridView.Rows)            
        total += (int)row.Cells[columnTotal.Index].Value;

    totalTextBox.Text = total.ToString();           
}

【讨论】:

  • 我也做了同样的事情。但问题是,每当我在网格中编辑同一列时,文本框中的先前值都会与新编辑的值一起添加。我只想在文本框中有新值而不是以前的值。
  • 也许你正在用当前文本框的值初始化total,而不是用零。
【解决方案2】:
private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
  if (dataGridView.Rows.Count > 0)
   {
     Double dobTotal = 0.00;
     if (dataGridView.Columns["colAmountPaid"].Name.ToString().Equals("colAmountPaid"))
      {
       for (int i = 0; i < dataGridView.Rows.Count; i++)
       {
        dobTotal += Double.Parse(dataGridView["colAmountPaid",i].EditedFormattedValue.ToString());
       }
       txtTotal.Text = dobTotal.ToString();
      }
     }
   }

【讨论】:

    【解决方案3】:
    <code>Private Sub EndEdit(ByVal sender As System.Object, ByVal e As EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged
            If DataGridView1.IsCurrentCellDirty Then
                DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
            End If
        End Sub
    
    <code>
        Private Sub DataGridView1_TextChanged(ByVal sender As System.Object, ByVal e As 
      System.Windows.Forms.DataGridViewCellEventArgs) Handles 
                                     DataGridView1.CellValueChanged
            If e.RowIndex = -1 Then
                isdirty = True
            End If
    
    //All code you want to perform on change event
    
    <code>    End Sub
    </code>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      相关资源
      最近更新 更多