Link to home
Create AccountLog in
Avatar of Jacque Scott
Jacque ScottFlag for United States of America

asked on

Help with understanding this code and rewriting code

I found this code and I am able to use it in another program with no problem.  It gets me the total of the line items checked.

Now I need to change it but I haven't seen code written like this. Can someone help me read it?  I get the basics but I need help adding to it.

public static decimal GetCheckedSum(this DataGridView sender, string CheckedColumn, string AmountColumnName)
        {
            return
                (
                    from Rows in sender.Rows.Cast<DataGridViewRow>()
                    where Convert.ToBoolean(Rows.Cells[CheckedColumn].Value) == true
                    select Convert.ToDecimal(Rows.Cells[AmountColumnName].Value)
                ).Sum();
        }

Open in new window


As you can see below if there is a BillAmt then there is nothing in the PaymentAmt Column.  When I run the above code I get an error because there is no number in the PaymentAmt column.

I have a grid that displays the amt of a bill or a payment.  If the user clicks on the checkbox I want to get the Total for the Bills and Payments.  Here is how I have the grid laid out.  If it is all messy I have attached a screen print to see.

CheckBox         ID                   BillAmt            PaymentAmt
                           45                    4,500.00                      
                           46                       200.00    
                           47                                               4,000.00
                           48                    2,000.00
                           49                                               5,000.00


I would like to add an IF Statement or something similar
 if (BillAmt == "")
{
    BillAmt = 0;
}

OR in the SELECT portion change it to this

select ISNULL(Convert.ToDecimal(Rows.Cells[AmountColumnName].Value), 0, Convert.ToDecimal(Rows.Cells[AmountColumnName].Value))

Open in new window



Doc3.docx
ASKER CERTIFIED SOLUTION
Avatar of zephyr_hex (Megan)
zephyr_hex (Megan)
Flag of United States of America image

Link to home
membership
Create an account to see this answer
Signing up is free. No credit card required.
Create Account
Avatar of Jacque Scott

ASKER

Thank you very much.  You pointed me in the right direction.  This is what I ended up with and is  working:

public static decimal GetCheckedSum(this DataGridView sender, string ColumnName, string AmountColumnName)
        {
            return
                (
                    from Rows in sender.Rows.Cast<DataGridViewRow>()
                    where Convert.ToBoolean(Rows.Cells[ColumnName].Value) == true
                    && Convert.ToString(Rows.Cells[AmountColumnName].Value) != ""
                    select Convert.ToDecimal(Rows.Cells[AmountColumnName].Value)
                ).Sum();
        }
Avatar of funwithdotnet
funwithdotnet

It loos like it's not accounting for null values.

How about something like:
3: select Convert.ToDecimal(Rows.Cells[AmountColumnName].Value = null : 0 : Rows.Cells[AmountColumnName].Value)

Open in new window


or
2: where Convert.ToBoolean(Rows.Cells[CheckedColumn].Value) == true && Rows.Cells[AmountColumnName].Value != null

Open in new window


I'm not  a LINQ or C# person, so my syntax might be off a bit.