【问题标题】:How to do math operation in datagridview using c#?如何使用c#在datagridview中进行数学运算?
【发布时间】:2017-02-20 09:28:58
【问题描述】:

我在 Excel 女士中的 datagridview 中进行数学运算时遇到问题,更具体地说,我想在 Close 列中减去 row[2] 和 row[3],结果我将保存在 Up 列中。

//假设表的索引从数字1开始

我会展示我的代码

        private void button3_Click(object sender, EventArgs e)
        {
            conn = new SqlConnection("Server=TSANAARSYANI;Data Source= TSANAARSYANI; Database = dbSaham;Integrated Security = SSPI");
            conn.Open();
            ds = new DataSet();
            da = new SqlDataAdapter("Select * From hargaRSI", conn);
            da.Fill(ds,"hargaRSI");
            dataGridView2.ReadOnly = true;
            dataGridView2.AllowUserToAddRows = false;
            dataGridView2.AllowUserToDeleteRows = false;
            dataGridView2.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dataGridView2.DataSource = ds.Tables["hargaRSI"];
            object value1 = dataGridView2[2, 2].Value;
            object value2 = dataGridView2[3, 2].Value;
            float val1, val2;
            if(float.TryParse(value1.ToString(),out val1)&&float.TryParse(value2.ToString(),out val2))
            {
                dataGridView2[3, 2].Value = val2 - val1;
            }
            else
            {
                MessageBox.Show("cannot substract, invalid inputs.");
            }
            dataGridView2.Visible = true;
        }

注意:我使用sql server,然后在datagridview而不是dataTable中检索数据

【问题讨论】:

  • 你想减去什么值,你想从日期列中减去关闭列或从关闭列中减去日期列,以及为什么要在网格中进行计算,为什么不执行这些计算在您的数据表中并将它们与网格绑定?
  • 请查看how-to-ask。请不要链接到数据,在这里发布。
  • 我想在第 [2] 行和第 [1] 行之间减去关闭列(例如:900.00-900.00),然后将结果放入列中
  • 好的对不起,我会在询问@MAdeelKhalid之前阅读规则
  • 你检查我的答案了吗?

标签: c# database datagridview sql-server-2014


【解决方案1】:

只需遍历行。然后您可以根据需要进行数学运算。检查这个:

 private void setResultOnDataGridView()
 {
     //dont calculate anything if source is null
     if (dataGridView1.DataSource == null) return;

     //get row numbers count
     var rowLen = dataGridView1.Rows.Count;

     //loop through rows of your GridView
     foreach (DataGridViewRow dr in dataGridView1.Rows)
     {
         //at last row. done
         if (dr.Index + 1 == rowLen) break;

         //get next row. 
         var nextRow = dataGridView1.Rows[dr.Index + 1];

         string col1 = dr.Cells["Close"].Value.ToString();
         string col2 = nextRow.Cells["Close"].Value.ToString();

         float val1=0, val2=0;
         if (float.TryParse(col1, out val1) && float.TryParse(col2, out val2))
         {
             dr.Cells["Up"].Value = val2 - val1;
         }
     }

 }

【讨论】:

    【解决方案2】:

    试试这个

    float value1 = float.Parse(dataGridView2.Rows[2].Cells[3].Value.ToString());
    float value2 = float.Parse(dataGridView2.Rows[3].Cells[2].Value.ToString());
    float sub = value2-value1;
    dataGridView2.Rows[3].Cells[2].Value = sub.ToString();
    

    【讨论】:

    • 谢谢你的建议,我试过了,效果不好,有一个错误信息说,我不能把cell[3]转换成字符串。
    猜你喜欢
    • 1970-01-01
    • 2011-08-18
    • 2020-02-05
    • 1970-01-01
    • 2011-04-06
    • 2018-08-26
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多