在包含数据源的 DevExpress 组合框中选择具有空值的项

本文关键字:选择 空值 包含 数据源 DevExpress 组合 | 更新日期: 2023-09-27 18:36:03

如何根据SQLDataReader值在组合框中选择值。

ASP 代码:

<asp:SqlDataSource ID="PREFERENCE_DS" runat="server" 
   ConnectionString="<%$ ConnectionStrings:ASPNETDBConnectionStringTEST %>" 
   SelectCommand="SELECT [ID], [NAME] FROM [OBJECTS] WHERE ([CLASSID] = @CLASSID) UNION ALL SELECT NULL, ' Нет'">
    <SelectParameters>
       <asp:Parameter DefaultValue="3" Name="CLASSID" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>
<dx:ASPxComboBox ID="PREFERENCE" runat="server" SelectedIndex="0" Width="430px" 
   ClientInstanceName="preference" AutoPostBack="True" 
   DataSourceID="PREFERENCE_DS" TextField="NAME" TextFormatString="{0}" 
   ValueField="ID">
   <Columns>
      <dx:ListBoxColumn FieldName="ID" Visible="False" />
      <dx:ListBoxColumn Caption="Преференция" FieldName="NAME" />
   </Columns>
</dx:ASPxComboBox>

我尝试

PREFERENCE.Value = reader["PREFERENCE"];

if (reader["PREFERENCE"] != null)
   PREFERENCE.Text = reader["PREFERENCE"].ToString();
else
   PREFERENCE.SelectedIndex = PREFERENCE.Items.FindByValue(DBNull.Value).Index;

但它不起作用。

在包含数据源的 DevExpress 组合框中选择具有空值的项

根据您的代码,我想我明白您在这里要做什么。 您的 select 语句将在联合上返回一个 null,所以我假设您要选择它。 我设置了一个测试项目并对 Databound 事件进行选择,这似乎工作正常。 需要转到组合框控件的属性,并为 DataBound 设置事件。 使用以下代码:

    protected void PREFERENCE_DataBound(object sender, EventArgs e)
    {
        for (int i = 0; i < PREFERENCE.Items.Count; i++)
        {
            if (PREFERENCE.Items[i].GetValue("ID") == DBNull.Value)
                PREFERENCE.Items[i].Selected = true;
        }
    }

我在这里选择了 ID 作为字段来检查空值,但您可以使用名称或任何其他您想要的字段。