Ich versuche, eine DataTable zu aktualisieren, die von einem DB abgerufen wird, bevor es an eine Gridview gebunden wird.DataRow setzt den Dezimalteil einer Dezimalstelle beim Aktualisieren von Datatable auf
Wenn ich jedoch Dezimalfelder aktualisiere, wird der Teil nach dem Dezimalpunkt auf Null gesetzt. Was vermisse ich?
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();
Ich habe Ausgabe PX und Bargeld vor der Zuweisung und sie halten die richtigen Werte von 800,19 und 500,12, aber nach dem AcceptChanges und sobald sie gebunden sind, ist der Ausgang 800,00 und 500,12.
theRows[0]["stockitem_pxprice"]
& theRows[0]["stockitem_cashprice"]
sind beide decimal(5,2)
auf der DB, wo die searchResultsDT von bevölkert ist.
Jede Hilfe sehr geschätzt.
Danke.
Was sind die Zwischenwerte von 'px' und' cash' nach dem 'Convert.ToDecimal()' Aufruf? Ich würde hier auf die Möglichkeit eines Kulturproblems schauen, aber die Tatsache, dass eines richtig funktioniert und das andere nicht sonderlich merkwürdig erscheint. –
Deklarieren Sie die Struktur (Schema) der 'searchResults', bevor Sie sie vom' SqlReader' laden? Vielleicht wird Ihr 'stockitem_pxprice' als' typeof (int) 'deklariert? –
Überprüfen Sie die Deklaration/Definition von Datatable searchResults. Es kann einen Typ geben, der nicht passt –