我有一个asp.net应用程序,其中有一个下拉列表绑定到数据集。但是在选择一个项目后,下拉列表会清除所有值,我们如何解决此问题?
这是我在设计页面中的下拉列表:
<asp:DropDownList ID="ddlProduct" runat="server" CssClass="textEntry" Width="300px"
AutoPostBack="True" OnSelectedIndexChanged="ddlProduct_SelectedIndexChanged">
</asp:DropDownList>
和绑定代码如下所示。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
BindProductDdl();
}
private void BindProductDdl()
{
Products objProducts = new Products();
dsProducts dsProduct = new dsProducts();
ListItem olst = default(ListItem);
olst = new ListItem(" Select", "0");
dsProduct = objProducts.GetDataset("");
ddlProduct.DataSource = dsProduct;
ddlProduct.DataTextField = "Product";
ddlProduct.DataValueField = "Id";
ddlProduct.DataBind();
ddlProduct.Items.Insert(0, olst);
}
protected void ddlProduct_SelectedIndexChanged(object sender, EventArgs e)
{
Products objProducts = new Products();
dsProducts dsProduct = new dsProducts();
string criteria = "";
if (ddlProduct.SelectedItem.Text != " Select")
{
string id = ddlProduct.SelectedItem.Value;
criteria = "Id='" + id + "'";
dsProduct = objProducts.GetDataset(criteria);
productValue = Convert.ToDecimal(dsProduct.tblProducts.Rows[0]["Value"].ToString());
}
}
提前致谢..
答案 0 :(得分:1)
将下拉列表的AppendDataBoundItems属性设置为true,这将允许您混合使用数据绑定项和非数据绑定项(否则插入语句将清除列表)
答案 1 :(得分:1)
如果我理解正确你的问题,你不希望下拉列表重新绑定,如果它已填充。另外请检查您的viewstate,除非您已禁用viewstate
,否则不应该这样做 protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack && ddlProduct.Items.count <=0 )
BindProductDdl();
}
答案 2 :(得分:0)
您是否在页面上禁用了viewstate?由于您只是在第一次加载页面时将项目加载到下拉列表中,如果未启用viewstate,则在回发后列表中将没有任何内容。
答案 3 :(得分:0)
不是正面的,但我已经看过其他语言和错误的解释......
您的产品价值为ToDecimal的转换,例如99.999。
如果您绑定的ID基于整数(即:整数),则绑定值将不匹配...即使Value = 1 vs Value = 1.00也不匹配且将不被视为与您的列表匹配的有效“值”。将你的答案转换为整数/整数,它可能会达到预期的效果。
答案 4 :(得分:0)
如果没有看到页面的完整源代码,我只是在推测,但您是否在页面上禁用了ViewState?如果是这样,DropDownList不能在回发之间保留其值,并且每次都必须重新加载列表。