Trying to generate one invoice foreach
distinct value in my SQL database column.
I have a SQL table, where one of the columns holds names of companies. 9 distinct ones, 20 in total.
Here's an abbreviated example to avoid any confusion:
ID | CompanyName | Value1 | Value2 | Value3 |
---|---|---|---|---|
1 | Company1 | 5 | 3 | 8 |
2 | Company2 | 9 | 9 | 1 |
3 | Company2 | 4 | 4 | 2 |
4 | Company3 | 2 | 2 | 2 |
5 | Company3 | 5 | 9 | 7 |
6 | Company3 | 2 | 2 | 1 |
Essentially, what I am trying to do, is bind this table to an ObservableCollection
, and then create a PDF for each distinct company.
So, I am thinking that I need to iterate over the column data, and initiate my method to create PDFs foreach
distinct value. Please have a look at my code below.
try {
using (SqlConnection con = new(//my connection string))
using (SqlCommand cmd = new("spMyStoredProcedure", con) { CommandType = CommandType.StoredProcedure })
using (SqlDataAdapter da = new(cmd))
using (DataSet ds = new()) {
con.Open();
da.Fill(ds);
foreach (DataRow dr in ds.Tables[0].Rows) {
MyObservableCollection.Add(New MyClass {
ID = (int)dr[0],
CompanyName = dr[1].ToString(),
Value1 = (decimal)dr[2],
Value2 = (decimal)dr[3],
Value3 = (decimal)dr[4],
});
}
} catch (Exception ex) {
}
There are some holes here.
I need to understand how to do the following:
- Where do I call my method to create PDFs? Do I need to wrap the above code in another
foreach
? - Do I also need to reference the names of my columns
(= "CompanyName")
? How? - How can I make sure that I only initiate my code for each distinct, unique value?