Improve company productivity with a Business Account.Sign Up

x
?
Solved

Help with understanding this code and rewriting code

Posted on 2016-08-09
3
Medium Priority
?
121 Views
Last Modified: 2016-08-09
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
0
Comment
Question by:huerita37
3 Comments
 
LVL 44

Accepted Solution

by:
zephyr_hex (Megan) earned 2000 total points
ID: 41749214
Given your event method:
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


This method returns a decimal value based on the results of the Linq query:

from Rows in sender.Rows.Cast<DataGridViewRow>()
where Convert.ToBoolean(Rows.Cells[CheckedColumn].Value) == true
select Convert.ToDecimal(Rows.Cells[AmountColumnName].Value)

Open in new window


That Linq query is looking at the rows in the gridview, where the checkbox has been selected, and then summing the value of the amount column for those rows.

The amount column is dependent on what's passed to the method.

This doesn't answer your entire question.  But hopefully it explains the method and how it's working.
1
 

Author Closing Comment

by:huerita37
ID: 41749270
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();
        }
0
 
LVL 12

Expert Comment

by:funwithdotnet
ID: 41749285
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.
1

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Watch the video to know how one can repair corrupt Exchange OST file effortlessly and convert OST emails to MS Outlook PST file format by using Kernel for OST to PST converter tool. It can convert OST to MSG, MBOX, EML to access them. It can migrate…
Watch the video to know the simple way to remove or recover or reset lost or forgotten passwords of Outlook PST file. With Kernel Outlook Password Recovery tool such operation is very easy to perform. It is a freeware with limitation to use with 500…

607 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question