问题描述
|
我有一个ASPxComboBox,可以根据用户输入正确进行过滤。现在,我要将所选项目保存到数据库。但是,当我尝试获取SelectedItem时,它为null。
均价
<dxe:ASPxComboBox ID=\"cboInstructor\" runat=\"server\" Width=\"100%\"
EnableCallbackMode=\"True\" CallbackPageSize=\"10\"
IncrementalFilteringMode=\"Contains\" ValueType=\"system.int32\" ValueField=\"employee_id\"
OnItemsRequestedByFilterCondition=\"cboInstructor_OnItemsRequestedByFilterCondition_sql\"
OnItemRequestedByValue=\"cboInstructor_OnItemRequestedByValue_sql\" textformatString=\"{0} {1}\"
DropDownStyle=\"DropDown\"
>
<Columns>
<dxe:ListBoxColumn FieldName=\"display_forename\" Caption=\"Forename\" />
<dxe:ListBoxColumn FieldName=\"display_surname\" Caption=\"Surname\" />
</Columns>
</dxe:ASPxComboBox>
<asp:sqlDataSource ID=\"sqlDataSourceInstruct\" runat=\"server\" ConnectionString=\"Server=testserver;User ID=root;Password=password;Persist Security Info=True;Database=central\" ProviderName=\"MysqL.Data.MysqLClient\" SelectCommand=\"GetUser\" SelectCommandType=\"StoredProcedure\">
<SelectParameters>
<asp:Parameter Name=\"filter\" Type=\"String\" />
<asp:Parameter Name=\"startIndex\" Type=\"Int32\" />
<asp:Parameter Name=\"endindex\" Type=\"Int32\" />
</SelectParameters>
</asp:sqlDataSource>
<asp:sqlDataSource ID=\"sqlDataSourceInstructPopulate\" runat=\"server\" ConnectionString=\"Server=testserver;User ID=root;Password=password;Persist Security Info=True;Database=central\" ProviderName=\"MysqL.Data.MysqLClient\" SelectCommand=\"GetUser\" SelectCommandType=\"StoredProcedure\">
</asp:sqlDataSource>
<asp:Button ID=\"btnTest\" runat=\"server\" Text=\"Test\" OnClick=\"btnTest_Click\" />
CS
protected void Page_Load(object sender,EventArgs e)
{
}
protected void cboInstructor_OnItemsRequestedByFilterCondition_sql(object source,ListEditItemsRequestedByFilterConditionEventArgs e)
{
ASPxComboBox comboBox = (ASPxComboBox)source;
sqlDataSourceInstruct.SelectParameters.Clear();
sqlDataSourceInstruct.SelectParameters.Add(\"filter\",TypeCode.String,string.Format(\"%{0}%\",e.Filter));
sqlDataSourceInstruct.SelectParameters.Add(\"startIndex\",TypeCode.Int32,(e.BeginIndex + 1).ToString());
sqlDataSourceInstruct.SelectParameters.Add(\"endindex\",(e.Endindex + 1).ToString());
comboBox.DataSource = sqlDataSourceInstruct;
comboBox.DataBind();
}
protected void cboInstructor_OnItemRequestedByValue_sql(object source,ListEditItemRequestedByValueEventArgs e)
{
long value = 0;
if (e.Value == null)
return;
if (!Int64.TryParse(e.Value.ToString(),out value))
return;
ASPxComboBox comboBox = (ASPxComboBox)source;
sqlDataSourceInstructPopulate.SelectCommand = @\"SELECT employee_id,display_surname,display_forename FROM user_record WHERE employee_id = @ID ORDER BY display_forename\";
sqlDataSourceInstructPopulate.SelectCommandType = System.Web.UI.WebControls.sqlDataSourceCommandType.Text;
sqlDataSourceInstructPopulate.SelectParameters.Clear();
sqlDataSourceInstructPopulate.SelectParameters.Add(\"ID\",TypeCode.Int64,e.Value.ToString());
comboBox.DataSource = sqlDataSourceInstructPopulate;
comboBox.DataBind();
comboBox.ValueField = \"employee_id\";
}
protected void btnTest_Click(object sender,EventArgs e)
{
int iTest = (int)cboInstructor.SelectedItem.GetValue(\"employee_id\");
}
在此行:
int iTest = (int)cboInstructor.SelectedItem.GetValue(\"employee_id\");
cboInstructor.SelectedItem
为空。有人知道为什么吗?
解决方法
安东尼
SelectedItem用于指定要选择的项目。一旦在ASPxComboBox中选择了一个项目,就可以使用Value或Text属性来引用它。
http://documentation.devexpress.com/#AspNet/DevExpressWebASPxEditorsASPxComboBoxMembersTopicAll
该线程还可以帮助您:
http://community.devexpress.com/forums/t/61424.aspx
谢谢。
, 我知道这个问题很旧,但是万一有人正在浏览它。以下是其他可能的解决方案:
确保ValueType符合表中的实际\'Value \'类型。某些值类型不会自动填充,例如\“ System.Guid \”。但是它们可用。本质上,DevExpress将使用表正在使用的任何值类型,即使未列出该值,如果您手动键入它,它也会将其选中。
根据设计,ASPxComboBox不会同步到服务器端。要解决此问题,请始终在每个页面请求时绑定ASPxComboBox。所以本质上您的页面加载看起来像这样
protected void Page_Load(object sender,EventArgs e)
{
SqlDataSourceInstruct.SelectParameters.Clear();
SqlDataSourceInstruct.SelectParameters.Add(\"filter\",TypeCode.String,string.Format(\"%{0}%\",e.Filter));
SqlDataSourceInstruct.SelectParameters.Add(\"startIndex\",TypeCode.Int32,(e.BeginIndex + 1).ToString());
SqlDataSourceInstruct.SelectParameters.Add(\"endIndex\",(e.EndIndex + 1).ToString());
cboInstructor.DataSource = SqlDataSourceInstruct;
cboInstructor.DataBind();
}
理想情况下,您将拥有一个重新加载ASPxComboBox的方法,并且只需调用该方法即可,而不必每次都重复此代码