0

こんにちは、datagridview の各行で 2 つのセルを乗算し、それらを合計するこのメソッドを取得しました。しかし、問題はセルが空の場合です。私は例外を受け取ります:

オブジェクトを DBNUll から他の型にキャストすることはできません

このメソッドに、dtgksluzby の castkaIndex2 または pocetIndex2 が空でない場合は、次の操作を行うという条件を追加したいと思います。

 private void calculateProductTwoColumns2(int castkaIndex2, int pocetIndex2, int tot_rows2)
    {
        try
        {
            double outVal = 0;
            foreach (DataGridViewRow row in dtg_ksluzby.Rows)
            {
                outVal = outVal + Convert.ToDouble(row.Cells[castkaIndex2].Value) * Convert.ToDouble(row.Cells[pocetIndex2].Value);
            }

            kpriplac.Text = outVal.ToString();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Chybové hlášení K3 " + ex.Message.ToString());
        }


    }

状態がどうなるかわからないので、まだ何も試していないのが残念です。私は次のようなことを考えていました:

 for (int i = 0; i < (dtg_ksluzby.Rows.Count - 0); i++)
            {

                if (dtg_ksluzby.Rows[i].Cells["pocet"].Value == null ||
                   (string)dtg_ksluzby.Rows[i].Cells["pocet"].Value == string.Empty)
                {
                    dtg_ksluzby.Rows[i].Cells["pocet"].Value = 0;
                }

}

これを適用する方法はありますか?

前もって感謝します

4

2 に答える 2

1

これを試して :

    private void calculateProductTwoColumns2(int castkaIndex2, int pocetIndex2, int tot_rows2)
        {
            try
            {
                double outVal = 0;
                foreach (DataGridViewRow row in dtg_ksluzby.Rows)
                {
                   double cell1;
                   double cell2;
                   if(Double.TryParse(row.Cells[castkaIndex2].Value, out cell1) && Double.TryParse(row.Cells[pocetIndex2].Value, out cell2 ))
                   {
                    outVal = outVal + cell1 * cell2;
                   }
                }

                kpriplac.Text = outVal.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Chybové hlášení K3 " + ex.Message.ToString());
            }
        }
于 2013-09-12T11:30:01.767 に答える
1

System.DBNull.Value次の操作を実行する前に、セルの値が正しいかどうかを確認する必要がありますConvert.ToDouble

private void calculateProductTwoColumns2(int castkaIndex2, int pocetIndex2, int tot_rows2)
{
    try
    {
        double outVal = 0;
        foreach (DataGridViewRow row in dtg_ksluzby.Rows)
        {
            outVal += Convert.ToDouble(row.Cells[castkaIndex2].Value is DBNull ? 0 : row.Cells[castkaIndex2].Value) * 
                      Convert.ToDouble(row.Cells[procetIndex2].Value is DBNull ? 0 : row.Cells[pocetIndex2].Value);
        }

        kpriplac.Text = outVal.ToString();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Chybové hlášení K3 " + ex.Message.ToString());
    }


}
于 2013-09-12T11:36:59.123 に答える