【问题标题】:DevExpress ASPxComboBox SelectItem is nullDevExpress ASPxComboBox SelectItem 为空
【发布时间】:2011-06-15 12:34:55
【问题描述】:

我有一个 ASPxComboBox,我能够正确过滤用户输入。现在我想将所选项目保存到数据库中。但是当我尝试获取 SelectedItem 时,它为空。

ASP

<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", TypeCode.Int32, (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 为空。有人知道为什么吗?

【问题讨论】:

    标签: combobox devexpress selecteditem aspxcombobox


    【解决方案1】:

    安东尼,

    SelectedItem 用于指定要选择的项目。在 ASPxComboBox 中选择一个项目后,您可以使用 Value 或 Text 属性来引用它。

    http://documentation.devexpress.com/#AspNet/DevExpressWebASPxEditorsASPxComboBoxMembersTopicAll

    这个帖子也可以帮助你: http://community.devexpress.com/forums/t/61424.aspx

    谢谢。

    【讨论】:

      【解决方案2】:

      我知道这个问题很老了,但万一有人正在查看它。以下是其他可能的解决方案:

      1. 确保 ValueType 与您的表中的实际“值”类型相匹配。某些值类型不会自动填充,例如“System.Guid”。但它们是可用的。本质上,DevExpress 将使用您的表正在使用的任何值类型,即使它没有列出,如果您手动键入它,它也会选择它。

      2. 按照设计,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", TypeCode.Int32, (e.EndIndex + 1).ToString());
            cboInstructor.DataSource = SqlDataSourceInstruct;
            cboInstructor.DataBind();
        }
        

      理想情况下,您应该有一个重新加载 ASPxComboBox 的方法,并且您只需调用该方法而不是每次都重复此代码

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多