Click here to Skip to main content
15,917,953 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
I have to add row value to particular column depending on flag.getting error as
Unable to cast object of type 'System.Data.DataRow' to type 'System.IConvertible'.Couldn't store <system.data.datarow> in AMOUNT Column. Expected type is Decimal.

What I have tried:

C#
DataTable dt = new DataTable();
         dt.Columns.AddRange(new DataColumn[5] {
 new DataColumn("AMOUNT", typeof(decimal)),
 new DataColumn("DUE DATE", typeof(string)),
  new DataColumn("PAYMENT DATE", typeof(decimal)),
 new DataColumn("EMI RECEIVED", typeof(decimal)),
 new DataColumn("OD CHRGS RECEIVED", typeof(decimal))
});
           //dt.Columns.Add("DATE", typeof(string));
           // dt.Columns.Add("DUE AMOUNT", typeof(decimal));
           // dt.Columns.Add("PAYMENT", typeof(decimal));
           // dt.Columns.Add("OD CHRGS RECEIVED", typeof(decimal));

         DataRow dr;
         dr = dt.NewRow();
            for (int i = 0; i < dsreq.Tables[0].Rows.Count; i++)
            {

                dr["AMOUNT"] = dt.Rows.Add(dsreq.Tables[0].Rows[i]["AMT"]);
                if (dsreq.Tables[0].Rows[i]["FLAG"].ToString() == "D")
                {
                    dr["DUE DATE"] = dt.Rows.Add(dsreq.Tables[0].Rows[i]["DATE1"].ToString());
                }
                else
                {
                    dr["PAYMENT DATE"] = dt.Rows.Add(dsreq.Tables[0].Rows[i]["DATE1"].ToString());
                }
                dr["EMI RECEIVED"] = dt.Rows.Add(dsreq.Tables[0].Rows[i]["INSTALLMENT AMOUNT"]);
                dr["OD CHRGS RECEIVED"] = dt.Rows.Add(dsreq.Tables[0].Rows[i]["AFC/OTHER AMOUNT"]);
Posted
Updated 10-Nov-16 11:39am
v2

try this
C#
for (int i = 0; i < dsreq.Tables[0].Rows.Count; i++)
           {
               DataRow  dr = dt.NewRow();
               dr["AMOUNT"] = Convert.ToDecimal(dsreq.Tables[0].Rows[i]["AMT"]);
               if (dsreq.Tables[0].Rows[i]["FLAG"].ToString() == "D")
               {
                   dr["DUE DATE"] = dsreq.Tables[0].Rows[i]["DATE1"].ToString();
               }
               else
               {
                   dr["PAYMENT DATE"] = Convert.ToDecimal(dsreq.Tables[0].Rows[i]["DATE1"].ToString());
               }
               dr["EMI RECEIVED"] = Convert.ToDecimal(dsreq.Tables[0].Rows[i]["INSTALLMENT AMOUNT"]);
               dr["OD CHRGS RECEIVED"] = Convert.ToDecimal(dsreq.Tables[0].Rows[i]["AFC/OTHER AMOUNT"]);
               dt.Rows.Add(dr);
           }



cast the values based on the type defined in the table column
 
Share this answer
 
Thanks for your response but from above i am getting output as:
AMOUNT DUE DATE PAYMENT DATE EMI RECEIVED
234017-01-2015233010 234014-02-2015233010 234013-03-2015233010 234015-04-2015233010

but i want output like this
AMOUNT DUE DATE PAYMENT DATE EMI RECEIVED
2340 14-02-2015 14-02-2015 2330
 
Share this answer
 
Comments
Richard Deeming 10-Nov-16 11:39am    
If you want to add a comment to a solution, use the "Have a Question or Comment?" button under that solution.

DO NOT post your comment as a new "solution".

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