我在网络表单上有一个下拉列表,其中包含项目名称和与之关联的价格(用户无法看到)。我使用selecteditem.Text和selectedvalue来捕获项目名称和价格。为了对抗selectedvalue的重复条目,我正在存储类似的条目
签署上限10.0
签名手套10.1
签名衬衫10.2
蝙蝠剃须.50
帽子边缘.50
然后使用下面的
解析出来String[] str = dropdownlist1.SelectedValue.ToString().Split('.');
String itemprice = str[0].Trim();
我的语法效果很好,除了十进制值!在蝙蝠剃须和帽檐上我需要保留小数值!我应该改变什么,或者我应该如何设置我的语法以允许重复的选定值或保留小数?我明白使用str [0]是导致我丢失小数的原因,但是我如何解决它需要保留的2个(可能更多的未来)场景圆通?
答案 0 :(得分:0)
您可以拆分空格,并始终使用linq:
获取最后一个条目dropdownlist1.SelectedValue.ToString().Split(' ').Last();
请注意,您应该使用隐藏的ItemId作为selectedvalue,而不是项目名称和价格,并使用以下查找表:
ItemId|Name|Price
1|Hat|.50
2|Bat Shavings|.50
...
提交选定的ID后,您可以更直接地查找名称和价格。此外,隐藏在表单中的价格并不会阻止用户操纵价格。
答案 1 :(得分:0)
很难从您的帖子中了解如何获取数据,但我会将数据从数据库加载到数据对象中,然后将该对象绑定到下拉列表。
以下是我用于存储数据库中数据的库存类:
public class Inventory
{
public int ProductID { get; set; }
public string ProductDescription { get; set; }
public decimal ProductPrice { get; set; }
public Inventory(int ID, string Description, decimal Price)
{
this.ProductID = ID;
this.ProductDescription = Description;
this.ProductPrice = Price;
}
public string DDLValue
{
get
{
return string.Format("{0}|{1}|{2}", ProductID, ProductDescription, ProductPrice);
}
}
public string DDLText
{
get
{
return string.Format("{0} [{1}]", ProductDescription, ProductPrice.ToString("C"));
}
}
}
以下是如何配置页面控件的示例:
<asp:DropDownList ID="ddlProducts" runat="server" DataValueField="DDLValue" DataTextField="DDLText" />
在后面的页面代码中,将数据加载到下拉列表中:
protected void LoadProductsFromDatabase()
{
System.Collections.Generic.List<Inventory> My_DDL_Datasource = new System.Collections.Generic.List<Inventory>();
// write your code to pull database values
// populating list with sample data for stackoverflow
// make sure to use a replace statement to remove any delimiter characters that may be in the description
My_DDL_Datasource.Add(new Inventory(1, "Product 1".Replace("|", ""), 0.50m));
My_DDL_Datasource.Add(new Inventory(2, "Product 2".Replace("|", ""), 1.50m));
My_DDL_Datasource.Add(new Inventory(3, "Product 3".Replace("|", ""), 0.50m));
My_DDL_Datasource.Add(new Inventory(4, "Product 4".Replace("|", ""), 10.50m));
ddlProducts.DataSource = My_DDL_Datasource;
ddlProducts.DataBind();
}
在后面的页面代码中,创建一个方法来获取下拉列表选择值:
protected Inventory GetSelectedProduct()
{
try
{
if (ddlProducts.Items.Count == 0)
{
// do nothing, fall thru will return null
}
else
{
string[] DDLValue = ddlProducts.SelectedValue.Split('|');
int ivalue = 0;
int.TryParse(DDLValue.GetValue(0).ToString(), out ivalue);
decimal dvalue = 0.00m;
decimal.TryParse(DDLValue.GetValue(2).ToString(), out dvalue);
// only return object if the productid and product price were successfully parsed.
// this logic assumes no products are free
if (ivalue > 0 && dvalue > 0.00m)
{
return new Inventory(ivalue, DDLValue.GetValue(1).ToString(), dvalue);
}
}
}
catch { }
return null;
}
在后面的网页代码中,使用您选择的值执行某些操作:
protected void DoSomethingWithValue()
{
Inventory MyInventoryItem = GetSelectedProduct();
if (MyInventoryItem != null)
{
// selected item successfully parsed
// do something with it.
Response.Write(
string.Format("Your selected product:<br />{0}<br />UniqueID: {1}<br />Price: {2}",
Server.HtmlEncode(MyInventoryItem.ProductDescription),
MyInventoryItem.ProductID,
MyInventoryItem.ProductPrice.ToString("C")
));
}
else
{
// error parsing information stored in drop down list value
}
}
答案 2 :(得分:0)
您需要从字符串中删除/替换所有字母字符,并且只保留数字。
once