在具有数据源的DevExpress Combobox中选择具有空值的项目

时间:2012-06-01 07:37:42

标签: c# asp.net

如何根据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;

但它不起作用。

1 个答案:

答案 0 :(得分:2)

根据您的代码,我想我会在这里看到您要做的事情。你的select语句将在union上返回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作为检查空值的字段,但您可以使用名称或任何其他字段。