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;
        }
    }

ここでは、null をチェックするフィールドとして ID を選択しましたが、名前やその他の必要なフィールドを使用することもできます。

于 2012-06-13T17:10:44.437 に答える