我在ASP.NET 4.0应用程序中使用ext.net 1.3控件。我的Web窗体上有几个ComboBox控件。该页面应该执行两个任务,插入和更新。保存新记录时没有问题,但是当我尝试使用现有数据库值填充ComboBox控件时,会弹出各种问题。最令人不安的是这一个:
ComboBox显示数据库中的Text,但它既没有填充,也没有能够选择ComboBox Value Member。这是因为它没有填充。我编写了代码来填充页面加载事件中的ComboBox。
我正在使用此代码从数据库中选择一个值并在ComboBox上显示它:
string Query = "SELECT CustName FROM CustomerMaster WHERE CustID = " + Session["CustomerID"];
var result = DB.Single<Customer>(Query);
CustomerComboBox.setValue = result.CustName;
此代码成功检索客户名称并显示在ComboBox中。它没有做的是它没有从ComboBox项目列表中选择,也没有填充ComboBox。
如果我尝试使用以下方法检索文本的Value Member:
CustomerComboBox.SelectedItem.Value;
它给出了错误。
为了使其正常工作,我需要再次单击ComboBox以使其填充,然后从列表中手动选择相同的客户名称以选择值。
如何摆脱这个问题?
- 已编辑 -
填写ext.net ComboBox的代码是:
public void FillExtComboList(string ParameterFlag, ComboBox DropDownName)
{
string Query = "";
using (TransactionScope transactionScope = new TransactionScope())
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["cncustomer"].ConnectionString.ToString()))
{
con.Open();
SqlDataReader dr;
try
{
if (ParameterFlag == "Customer")
{
Query = "SELECT CustName FROM CustomerMaster";
}
//Check whether the Drop Down has existing items. If YES, empty it.
if (DropDownName.Items.Count > 0)
DropDownName.Items.Clear();
SqlCommand cmd = new SqlCommand(Query, con);
dr = cmd.ExecuteReader();
while (dr.Read())
{
Ext.Net.ListItem extLI = new Ext.Net.ListItem();
extLI.Text = dr[0].ToString();
DropDownName.Items.Add(extLI);
}
dr.Close();
con.Close();
}
catch (Exception ex)
{
con.Close();
// RunCustomScript("alert('" + ex.Message.ToString() + "')", callingPageObjectName);
}
} /* End of SQL Connection */
transactionScope.Complete();
} /* End of Transaction Scope */
}
在Page Load事件中,ComboBox控件用上面的方法填充。
答案 0 :(得分:0)
我没有看到填充组合框的说明,只是设置其选定的值。你是否错过了CustomerComboBox.DataSource = someList或类似的内容?
&lt; - 编辑 - &gt;
抱歉,我认为setValue是您网页加载的代码... 好的,这不是您的问题的答案,而是一个重要的性能修复。 你应该在加载组合时执行此操作: 执行SQL查询时:
Query = "SELECT CustID, CustName FROM CustomerMaster"
填写组合时:
Ext.Net.ListItem extLI = new Ext.Net.ListItem();
extLI.Value = dr["CustId"].ToString();
extLI.Text = dr["CustName"].ToString();
DropDownName.Items.Add(extLI);
所以当你想选择一个项目时,你就这样做了:
CustomerComboBox.setValue = Session["CustomerID"];
并避免返回数据库以获取客户名称。
现在,您可以分享处理组合框点击的代码吗?因为它确实填充了组合,它可能会给我们带来一些影响。另外,尝试添加
CustomerComboBox.DataBind()
然后,想一想,我在Page_Load上看到你使用“DropDownName”,后来你使用“CustomerComboBox”。这可能是问题吗?
答案 1 :(得分:0)
如果我理解你正确尝试此代码:
protected void Page_Load(object sender, EventArgs e) {
FillExtComboList(DropDownName);
// Set value that you want
DropDownName.SetValueAndFireSelect("Test 3");
}
public void FillExtComboList(ComboBox DropDownName) {
try {
//Check whether the Drop Down has existing items. If YES, empty it.
if (DropDownName.Items.Count > 0)
DropDownName.Items.Clear();
for (int i = 0; i < 10; i++) {
Ext.Net.ListItem extLI = new Ext.Net.ListItem();
extLI.Text = "Test " + i;
DropDownName.Items.Add(extLI);
}
} catch (Exception ex) {
// RunCustomScript("alert('" + ex.Message.ToString() + "')", callingPageObjectName);
} /* End of Transaction Scope */
}