首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DevExpress ASPxComboBox非滤波

DevExpress ASPxComboBox非滤波
EN

Stack Overflow用户
提问于 2011-06-10 10:47:34
回答 1查看 8.1K关注 0票数 0

我有一个来自DevExpress套件的DevExpress,并且正在尝试过滤它。如果我单击组合框的下拉按钮,它将显示查询的前几个部分,好像过滤器是空的一样。

如果我尝试填充过滤器,或者向下滚动以查看更多内容,它只会提供一个永久的“加载”状态。当使用适当的参数运行时,存储过程返回正确的结果。有什么问题吗?

编辑:我一直在DevExpress站点上学习本教程:http://demos.devexpress.com/ASPxEditorsDemos/ASPxComboBox/LargeDataSource.aspx

编辑(再次):好的,如果我删除行:

代码语言:javascript
复制
<ClientSideEvents BeginCallback="function(s, e) { OnBeginCallback(); }" EndCallback="function(s, e) { OnEndCallback(); } " />

在组合框中,它将到达cboInstructor_OnItemsRequestedByFilterCondition_SQL中的一个断点,但在进入DataBind()时,它会刺穿错误:

索引(基于零)必须大于或等于零,并且小于参数列表的大小。

ASP文件

代码语言:javascript
复制
<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文件

代码语言:javascript
复制
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存储过程

代码语言:javascript
复制
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 ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-10 13:48:04

为什么这些事情总是这么简单?!我在TextFormatString="{1} {2}"中有ASPxComboBox,只有2列,之前我有第三列,但是删除了它,忘记了更改TextFormatString --我刚刚从上面发布的示例中删除了ClientSideEvents,但是我没有使用它们。

一切都正常了!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6305270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档