2017-02-20 7 views
0

私はExcelのようなdatagridviewで数学演算を行う問題があります。より具体的には、列[2]と行[3]を列のCloseで減算して、結果を列Upに保存します。私は、SQL Serverを使用し、その後のDataGridViewではなくデータを取得:C#を使用してdatagridviewで数学演算を行うには?

//私は

 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; 
     } 

ノート私のコードが表示されますのは、そのテーブルのインデックスは、数1

This is data image

から始めると仮定しましょうdataTable

+0

あなたのデータテーブル内での計算とグリッドとのバインド? –

+0

[how-to-ask](http://stackoverflow.com/help/how-to-ask)をご覧ください。データにリンクしないで、ここに投稿してください。 – swe

+0

私はカラムのクローズ(例:900.00-900.00)でロー[2]とロー[1]の間を差し引いて、結果をカラムアップに入れます – phoenix95

答えて

0

行をループするだけです。必要に応じて数学演算を行うことができます。チェックこの:あなたが引くたかった値は、あなたが近い列から日付の列や日付列から近い列を減算すると、あなたがやりたい理由も、グリッド内の計算は、なぜそれらを実行しないことを望んでいたいただきました!

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; 
     } 
    } 

} 
+0

それは本当に動作します、あなたの助けをありがとう! – phoenix95

0

これを試す

float value1=float.parse(dataGridView2.row[2].cells[3].value.toString()); 
float value2=float.parse(dataGridView2.row[3].cells[2].value.toString()); 
float sub=value2-value1; 
(dataGridView2.row[3].cells[2].value=sub.toString(); 
+0

あなたの提案をありがとう、私はそれを試して、それはうまく動作しない、と言うエラーメッセージがあります、私はセル[3]文字列に。 – phoenix95

+0

はセルインデックスかローインデックスが間違っている可能性があります。 –

関連する問題