[英]DevExpress ASPxComboBox not filtering
I have an ASPxComboBox from the DevExpress suite and am trying to get it filtered.我有一个来自 DevExpress 套件的 ASPxComboBox,并且正在尝试对其进行过滤。 If I click on the dropdown button of the combo box it will show the first few of the query as if the filter is empty.如果我单击组合框的下拉按钮,它将显示查询的前几个,就好像过滤器为空一样。
If I try to populate the filter, or scroll down to see more, it will just provide a perpetual "Loading" state.如果我尝试填充过滤器,或向下滚动以查看更多信息,它只会提供永久“加载”state。 The stored procedure returns the correct results when ran with appropriate parameters.存储过程在使用适当的参数运行时返回正确的结果。 What could be the problem?可能是什么问题呢?
EDIT: I have been following this tutorial on the DevExpress site: http://demos.devexpress.com/ASPxEditorsDemos/ASPxComboBox/LargeDataSource.aspx编辑:我一直在 DevExpress 网站上关注本教程: http://demos.devexpress.com/ASPxEditorsDemos/ASPxComboBox/LargeDataSource.aspx
EDIT (again): OK if I remove the line:编辑(再次):好的,如果我删除该行:
<ClientSideEvents BeginCallback="function(s, e) { OnBeginCallback(); }" EndCallback="function(s, e) { OnEndCallback(); } " />
from the combo box it will hit a break point in cboInstructor_OnItemsRequestedByFilterCondition_SQL
, but on going to the DataBind()
it will thorw the error:从组合框中,它将在cboInstructor_OnItemsRequestedByFilterCondition_SQL
中遇到断点,但是在转到DataBind()
时,它将抛出错误:
Index (zero based) must be greater than or equal to zero and less than the size of the argument list.索引(从零开始)必须大于或等于零且小于参数列表的大小。
ASP file ASP文件
<form id="form1" runat="server">
<div>
<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="{1} {2}"
DropDownStyle="DropDown" DataSourceID="SqlDataSourceInstruct"
>
<Columns>
<dxe:ListBoxColumn FieldName="display_forename" />
<dxe:ListBoxColumn FieldName="display_surname" />
</Columns>
<ClientSideEvents BeginCallback="function(s, e) { OnBeginCallback(); }" EndCallback="function(s, e) { OnEndCallback(); } " />
</dxe:ASPxComboBox>
<asp:SqlDataSource ID="SqlDataSourceInstruct" runat="server" ConnectionString="Server=160.10.1.25;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>
</div>
</form>
CS file CS文件
public partial class TestComboBox : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void cboInstructor_OnItemsRequestedByFilterCondition_SQL(object source, ListEditItemsRequestedByFilterConditionEventArgs e)
{
ASPxComboBox comboBox = (ASPxComboBox)source;
//SqlDataSourceInstruct.SelectCommand =
// @"SELECT CONCAT(display_Forename, ' ', display_Surname) FROM (SELECT employee_id, display_forename , display_surname, @rownum:=@rownum+1 AS rn FROM central.user_record, (SELECT @rownum:=0) AS r WHERE CONCAT(display_forename, ' ', display_surname) LIKE @filter ORDER BY display_surname ASC) AS st where st.rn between @startIndex and @endIndex";
SqlDataSourceInstruct.SelectParameters.Clear();
SqlDataSourceInstruct.SelectParameters.Add("filter", TypeCode.String, string.Format("%{0}%", e.Filter));
SqlDataSourceInstruct.SelectParameters.Add("startIndex", TypeCode.Int64, (e.BeginIndex + 1).ToString());
SqlDataSourceInstruct.SelectParameters.Add("endIndex", TypeCode.Int64, (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;
SqlDataSourceInstruct.SelectCommand = @"SELECT employee_id, display_surname, display_forename FROM central.user_record WHERE (employee_id = @ID) ORDER BY display_forename";
SqlDataSourceInstruct.SelectParameters.Clear();
SqlDataSourceInstruct.SelectParameters.Add("ID", TypeCode.Int64, e.Value.ToString());
comboBox.DataSource = SqlDataSourceInstruct;
comboBox.DataBind();
}
}
MySQL stored procedure MySQL 存储过程
DELIMITER $$
USE `central`$$
DROP PROCEDURE IF EXISTS `GetUser`$$
CREATE DEFINER=`root`@`%` PROCEDURE `GetUser`(filter VARCHAR(50), startIndex INT, endIndex INT)
BEGIN
SELECT employee_id, display_Forename, display_Surname
FROM
(SELECT
employee_id
, display_forename
, display_surname
, @rownum:=@rownum+1 AS rn
FROM central.user_record,
(SELECT @rownum:=0) AS r
WHERE CONCAT(display_forename, ' ', display_surname) LIKE filter
ORDER BY display_surname ASC) AS st
WHERE st.rn BETWEEN startIndex AND endIndex;
END$$
DELIMITER ;
Why are these things always so simple?!为什么这些事情总是那么简单?! I had TextFormatString="{1} {2}"
in the ASPxComboBox
and there are only 2 columns, I had a third before but removed it and forgot to change the TextFormatString
I also just removed the ClientSideEvents
as they were from the example I posted above, but I wasn't using them.我在ASPxComboBox
中有TextFormatString="{1} {2}"
并且只有 2 列,我之前有第三列但删除了它并忘记更改TextFormatString
我也刚刚删除了ClientSideEvents
,因为它们来自我发布的示例上面,但我没有使用它们。
Everything working now!现在一切正常!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.