Click here to Skip to main content
15,740,826 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am doing a refactoring for a method which is looking like :
C#
private static DataTable getOrdersAll(string OrderID, string OrderLineNo = "")
{
   // do some queries etc
}


i have changed it into like this :
C#
private static List<BranchSales> getOrdersAll(string OrderID, string OrderLineNo = "")

so i changed from return DataTable into return List<BranchSales> so far is goood
my problem that this method has a reference and in the reference looking like : "Look what have you tried" ...i just post some lines from the method....

how can i change DataRow? should i do a new class with properties that presenting the Datarow ? i have got stuck here what should i do to change all DataTables and DataRows into a List<T>
=======Update the Question=============

I have posted the whole code
my problem now to change the method " private void FuellenStatus(string AuftragNr)"

for an explanation i will be so glad
thanks in advanced

What I have tried:

private static List<BranchSales> getOrdersAll(string OrderID, string OrderLineNo = "")
       {
           List<BranchSales> elements = new List<BranchSales>();
           using (IDbConnection connection = SQL_DB.getSQL_Connection())
           {
               connection.Open();
               DynamicParameters parameters = new DynamicParameters();
               parameters.Add("@OrderID", OrderID);
               elements = connection.Query<BranchSales>("spGetOrdersAll_Intrax_Test", parameters, commandTimeout: 180,commandType: CommandType.StoredProcedure).AsList();
           }
           return elements;
       }

Thats what i have changed it .

"Reference of method" :
public static List<BranchSales> getOrdersAll(string OrderNo)
       {
           return getOrdersAll(OrderNo, string.Empty);
       }


the method getOrderAll will be call in this method :

public DataTabel IntraxAuftrag;

 private void FuellenStatus(string AuftragNr)
{
 DataTable OffeneBestellung = SQL_DB.getOrdersAll(AuftragNr);

 IntraxAuftrag.Columns.Clear();
                    string sAuftrag = string.Empty;

                    IntraxAuftrag.Columns.Add("Status");
                    IntraxAuftrag.Columns.Add("StatusColor");
                    IntraxAuftrag.Columns.Add("StatusKey");
                    foreach (DataTable dr in OffeneBestellung.Rows)
                    {

                        if (dr[InfoE_Mail_gesendet] == "true")
                        {
                            AnzeigeZahlungen(dr[CustomerNo]);
                            if (sAuftrag != dr.Auftrag)
                            {
                                IntraxAuftrag.Columns.Add(dr["Auftrag"].ToString());
                                sAuftrag = dr["Auftrag"].ToString();
                            }

                            DataRow row = GetRow(IntraxAuftrag, "BranchSaleID", "UNVISIBLE", sAuftrag);
                            row[dr["Auftrag"].ToString()] = dr["branchSaleID"].ToString();
                            try { IntraxAuftrag.Rows.Add(row); } catch { }

                            row = GetRow(IntraxAuftrag, "Sendungslink", "UNVISIBLE", sAuftrag);
                            row[dr["Auftrag"].ToString()] = dr["Sendungslink"].ToString();
                            try { IntraxAuftrag.Rows.Add(row); } catch { }
                        

                            row = GetRow(IntraxAuftrag, "Auftrag", "ALLGEMEIN", sAuftrag);
                            row[dr["Auftrag"].ToString()] = dr["Auftrag"].ToString();
                             try { IntraxAuftrag.Rows.Add(row); } catch { }

                            row = GetRow(IntraxAuftrag, "Zahlungsart", "ALLGEMEIN", sAuftrag);
                            row[dr["Auftrag"].ToString()] = dr["Zahlungsart"].ToString();
                            try { IntraxAuftrag.Rows.Add(row); } catch { }
                        

                            row = GetRow(IntraxAuftrag, "Artikel", "ALLGEMEIN", sAuftrag);
                            row[dr["Auftrag"].ToString()] = dr["itemNo"].ToString();
                            try { IntraxAuftrag.Rows.Add(row); } catch { }

                            row = GetRow(IntraxAuftrag, "Menge", "ALLGEMEIN", sAuftrag);
                            row[dr["Auftrag"].ToString()] = dr["quantity"].ToString();
                            try { IntraxAuftrag.Rows.Add(row); } catch { }

                            row = GetRow(IntraxAuftrag, "Filiale", "ALLGEMEIN", sAuftrag);
                            row[dr["Auftrag"].ToString()] = dr["branchCode"].ToString();
                            try { IntraxAuftrag.Rows.Add(row); } catch { }

                            row = GetRow(IntraxAuftrag, "Adresse", "ALLGEMEIN", sAuftrag);
                            row[dr["Auftrag"].ToString()] = dr["name"].ToString() + dr["street"].ToString() + dr["postcode"].ToString() + "-" + dr["city"].ToString();
                            try { IntraxAuftrag.Rows.Add(row); } catch { }


                            if (dr["cancellation"].ToString() == "False")
                            {
                                row = GetRow(IntraxAuftrag, "Laufzettel gedruckt", "INTERN", sAuftrag);
                                row[dr["Auftrag"].ToString()] = dr["Laufzettel_gedruckt_am"].ToString();
                                try { IntraxAuftrag.Rows.Add(row); } catch { }

                                row = GetRow(IntraxAuftrag, "bestätigt", "INTERN", sAuftrag);
                                row[dr["Auftrag"].ToString()] = dr["Bestellbest_Zeit"].ToString(); //Datum Uhrzeit anzeigen, wenn leer rot, ansonsten grün
                                try { IntraxAuftrag.Rows.Add(row); } catch { }

                                row = GetRow(IntraxAuftrag, "bezahlt", "INTERN", sAuftrag);
                                row[dr["Auftrag"].ToString()] = dr["Zahlungeingegangen_zeit"].ToString();//Datum Uhrzeit anzeigen, wenn leer rot, ansonsten grün
                                try { IntraxAuftrag.Rows.Add(row); } catch { }


                                row = GetRow(IntraxAuftrag, "Rechnung", "INTERN", sAuftrag);
                                row[dr["Auftrag"].ToString()] = dr["Rechnungsdruck_Zeit"].ToString();//Datum Uhrzeit anzeigen, wenn leer rot, ansonsten grün
                                try { IntraxAuftrag.Rows.Add(row); } catch { }


                                row = GetRow(IntraxAuftrag, "Filialrechnung", "INTERN", sAuftrag);
                                row[dr["Auftrag"].ToString()] = dr["Rechnungsdatum"].ToString();//Datum Uhrzeit anzeigen, wenn leer rot, ansonsten grün
                                try { IntraxAuftrag.Rows.Add(row); } catch { }


                                row = GetRow(IntraxAuftrag, "Ver. beauftrag", "INTERN", sAuftrag);
                                row[dr["Auftrag"].ToString()] = dr["Versanddienstleider_Zeit"].ToString();//Datum Uhrzeit anzeigen, wenn leer rot, ansonsten grün
                                try { IntraxAuftrag.Rows.Add(row); } catch { }

                                row = GetRow(IntraxAuftrag, "versendet", "VERSAND", sAuftrag);
                                row[dr["Auftrag"].ToString()] = dr["Versandbestätigt_Zeit"].ToString();//Datum Uhrzeit anzeigen, wenn leer rot, ansonsten grün
                                try { IntraxAuftrag.Rows.Add(row); } catch { }

                                row = GetRow(IntraxAuftrag, "Tracking", "VERSAND", sAuftrag);
                                row[dr["Auftrag"].ToString()] = dr["Tracking_Zeit"].ToString();//Datum Uhrzeit anzeigen, wenn leer rot, ansonsten grün
                                try { IntraxAuftrag.Rows.Add(row); } catch { }

                                row = GetRow(IntraxAuftrag, "zugestellt/unterwegs", "KUNDE", sAuftrag);
                                DataTable dtDelivery = SQL_DB.GetDeliveryOrder(dr["branchSaleID"].ToString(), string.Empty);
                                if (dtDelivery.Rows.Count > 0)
                                {
                                    row[dr["Auftrag"].ToString()] = dtDelivery.Rows[0]["StatusTrex"].ToString();
                                }
                                try { IntraxAuftrag.Rows.Add(row); } catch { }

                                if (dr["BranchShipment"].ToString() == "True")
                                {
                                    DataTable dtAusFil = SQL_DB.getAuslieferungsFiliale(AuftragNr, Convert.ToInt32(dr["OrderLineNo"].ToString()));
                                    if (dtAusFil.Rows.Count > 0)
                                    {
                                        row = GetRow(IntraxAuftrag, "Übergabe in Filiiale", "INTERN", sAuftrag);
                                        row[dr["Auftrag"].ToString()] = dtAusFil.Rows[0]["branchCode"].ToString();
                                        try { IntraxAuftrag.Rows.Add(row); } catch { }


                                        row = GetRow(IntraxAuftrag, "Übergabe an Kunde", "KUNDE", sAuftrag);
                                        row[dr["Auftrag"].ToString()] = dtAusFil.Rows[0]["BranchShipmentReceived_delivered_Date"].ToString();
                                        try { IntraxAuftrag.Rows.Add(row); } catch { }
                                    }
                                }
                            }
                            else
                            {
                                row = GetRow(IntraxAuftrag, "Status", "STORNIERT", sAuftrag);
                                row[dr["Auftrag"].ToString()] = "STORNIERT";
                                try { IntraxAuftrag.Rows.Add(row); } catch { }
                            }
                            IntraxAuftrag = ReadRetouren(dr["branchSaleID"].ToString(), dr["Auftrag"].ToString(), IntraxAuftrag);
                        }
                    }

                }
Posted
Updated 10-Oct-19 22:59pm
v4

1 solution

I'm not absolutely clear what you are trying to do here - your description doesn't make a lot of sense, and you don't show any calls to getOrdersAll- but it seems that you are trying to change a method from returning a DataTable to returning a List of a specific class.

Assuming that you modified the method correctly, your description implies that when you call it, you are getting an error because the return types no longer match, which makes sense - you can't use a List as a DataTable; the two types are unrelated. You would have to change the calling code to expect a List<BranchSales> instead of a DataTable.

Or, it could be that you are trying to convert each DataRow instance in a table to a instance of your BranchSales class so you can add it to the collection for return - in which case you need to create a new instance of BranchSales for each DataRow, and fill it with the data from your DataTable. You can then add this instance to the collection.

If neither of those is your problem, you will need to explain in much better detail exactly what you are trying to do, give us any error messages, and show us the code they relate to.
 
Share this answer
 
Comments
[no name] 11-Oct-19 4:52am    
hi Paul, i have updated the code now . may you have a look please
[no name] 11-Oct-19 4:58am    
updated once again . sorry
OriginalGriff 11-Oct-19 5:04am    
And look at your code:
DataTable OffeneBestellung = SQL_DB.getOrdersAll(AuftragNr);

getOrdersAll doesn't return a DataTable any more, so you have to change the code that calls it to support the List you do return.

You can't assign a List to a variable that contains a DataTable, the two types are not related! That's like trying to do this
FruitBasket fruits = myCarPark.GetAllCars();
[no name] 11-Oct-19 5:06am    
var OffeneBestellung = SQL_DB.getOrdersAll(AuftragNr);
i did the following
OriginalGriff 11-Oct-19 5:23am    
I hate that - use explicit classes rather than var if the type isn't obvious from the code.
But ... I'll bet the rest of the code doesn't work now, because a List doesn't have a Rows collection...

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900