2012-06-01 45 views
1

如何根據SQLDataReader值在組合框中選擇值。在DevExpress中選擇空值的項目與數據源組合框

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; 

,但它不工作。

回答

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作爲現場檢查空,但您可以使用名稱,或任何你想要的其他領域。

相關問題