Próbuję zaktualizować DataTable, która jest pobierana z DB przed powiązaniem go z Gridview.DataRow zeruje dziesiętną część dziesiętnej przy aktualizacji Datatable
Jednak po zaktualizowaniu pól dziesiętnych część po przecinku dziesiętnym jest zerowana. czego mi brakuje?
if (HttpContext.Current.Request.IsAuthenticated)
{
// Get additional price matches
using (SqlConnection stockConn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString))
{
// Check for trade match offer
SqlCommand tradePCCheck = new SqlCommand("getAllMyPriceMatches", stockConn);
tradePCCheck.CommandType = CommandType.StoredProcedure;
SqlParameter email = tradePCCheck.Parameters.Add("@email", SqlDbType.NVarChar);
try
{
email.Value = this.Context.User.Identity.Name;
}
catch
{
email.Value = " ";
}
SqlParameter thedate = tradePCCheck.Parameters.Add("@theDate", SqlDbType.DateTime);
thedate.Value = DateTime.Now.AddHours(-50);
stockConn.Open();
SqlDataReader pcReader = tradePCCheck.ExecuteReader();
pms.Load(pcReader);
pcReader.Close();
stockConn.Close();
}
}
//Set Connection, Open the DB & Fill Data Set
using (SqlConnection stockConn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString))
{
SqlCommand stockCommand = new SqlCommand("getTISearchResults", stockConn);
stockCommand.CommandType = CommandType.StoredProcedure;
SqlParameter keyword = stockCommand.Parameters.Add("@keyword", SqlDbType.NVarChar);
keyword.Value = prefixText;
stockConn.Open();
SqlDataReader rd = stockCommand.ExecuteReader();
searchResults.Load(rd);
stockCommand.Dispose();
rd.Dispose();
}
// Update Results with elevated prices...
foreach (DataRow dr in searchResults.Rows)
{
// Check for PMS
DataRow[] thePMS = pms.Select("tpc_stockid = '" + dr["stockitem_number"].ToString() + "'");
if (thePMS.Length > 0)
{
decimal px = 0;
decimal cash = 0;
if (thePMS[0]["tpc_pricepx"] != null && !thePMS[0]["tpc_pricepx"].ToString().Equals(""))
{
px = Convert.ToDecimal(thePMS[0]["tpc_pricepx"]);
}
if (thePMS[0]["tpc_price"] != null && !thePMS[0]["tpc_price"].ToString().Equals(""))
{
cash = Convert.ToDecimal(thePMS[0]["tpc_price"]);
}
// update table and accept changes
DataRow[] theRows = searchResults.Select("stockitem_number = '" + dr["stockitem_number"].ToString() + "' ");
if (theRows.Length > 0)
{
theRows[0]["stockitem_pxprice"] = px;
theRows[0]["stockitem_cashprice"] = cash;
searchResults.AcceptChanges();
}
}
}
gvSearchResults.DataSource = searchResults;
gvSearchResults.DataBind();
mam PX wyjściowego i Cash przed przypisaniem i posiadają odpowiednie wartości 800.19 i 500.12, ale po AcceptChanges i raz są one związane, wyjście jest 800,00 i 500,12.
theRows[0]["stockitem_pxprice"]
& theRows[0]["stockitem_cashprice"]
są oba decimal(5,2)
na DB, z którego jest wypełniany searchResultsDT.
Każda pomoc bardzo ceniona.
Dzięki.
Jakie są pośrednie wartości 'px' i' gotówka' po wywołaniu 'Convert.ToDecimal()'? Spoglądałbym na możliwość wystąpienia problemu kulturowego, ale fakt, że jeden działa prawidłowo, a drugi nie wydaje się naprawdę dziwny. –
Czy deklarujesz strukturę (schemat) 'searchResults' przed załadowaniem go z' SqlReader'? Może twoja 'stockitem_pxprice' jest zadeklarowana jako' typeof (int) '? –
Sprawdź deklarację/definicję datowalnych wyników wyszukiwania. Może występować niedopasowanie typów. –