1

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

但它不起作用。

4

1 回答 1

2

根据您的代码,我想我知道您在这里尝试做什么。您的 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 作为检查空值的字段,但您可以使用名称或任何其他您想要的字段。

于 2012-06-13T17:10:44.437 回答