0

2つのドロップダウンリストを作成しようとしています。最初のドロップダウンリストにはユーザーのリストが表示され、2番目のドロップダウンリストは[OK]ボタンをクリックしたときにのみ表示され、ユーザーのアカウントのリストが表示されます。aspxページには次のコードがあります。

User:
<asp:SqlDataSource id="sourceUsers" runat="server" ConnectionString="<%$ ConnectionStrings:ct2012 %>"
    SelectCommand="SELECT name, id FROM users" />
<asp:DropDownList id="codUsers" runat="server" DataSourceID="sourceUsers"
    DataTextField="name" DataValueField="id" AutoPostBack="true" >
</asp:DropDownList>
<br />
Conto:
<asp:SqlDataSource id="sourceAccounts" runat="server" ConnectionString="<%$ ConnectionStrings:ct2012 %>" />
<asp:DropDownList id="accUsers" runat="server" DataSourceID="sourceAccounts"
    DataTextField="code" DataValueField="id" Visible="false" >
</asp:DropDownList>
<br />
<asp:Button ID="btOK" text="OK" OnClick="cmdNew_Click" runat="server" />

ボタンイベントを処理するためのc#コードは次のとおりです。

protected void cmdNew_Click(object sender, EventArgs e)
    {
        sourceAccounts.SelectCommand = "SELECT code, id FROM accounts WHERE ID_user=" + codUsers.DataValueField;
        accUsers.Visible = true;
    }

問題は、codUsers.DataValueFieldがインデックスの値ではなく文字列「id」を返すことです。

4

6 に答える 6

3

使用する:

`codUsers.SelectedValue` instead of  `codUsers.DataValueField`

または

codUsers.SelectedItem.Value

または

codUsers.Items[codUsers.SelectedIndex].Value
于 2012-09-28T13:12:30.547 に答える
3

試す

codUsers.SelectedValue;

これはあなたのために働くはずです。

于 2012-09-28T13:13:53.080 に答える
1

使ってみてくださいcodUsers.SelectedValue;

sourceAccounts.SelectCommand = "SELECT code, id FROM accounts WHERE ID_user=" + 
codUsers.SelectedValue;

あなたは可能なSQLインジェクションのためにあなた自身を準備しています。(事前定義された値を取得しているため、この特定のケースではないかもしれませんが、この値がテキストボックスから取得されるとすると、パラメーター化されたクエリを使用した方がよいでしょう。

 string myVariable = someTextBox.Text;
 string sqlString = "Select something from someTable where someField=@someVariable";
 oCmd.Parameters.AddWithValue("@someVariable", myVariable);
于 2012-09-28T13:11:59.763 に答える
1

プロパティである必要があります.SelectedValue

したがって、SelectCommandは次のようになります。

sourceAccounts.SelectCommand = "SELECT code, id FROM accounts WHERE ID_user=" + 
                                codUsers.SelectedValue;

DataValueFieldDropDownListへの値の割り当てフィールドの時に使用されます。

DataTextFieldテキストフィールド用。

于 2012-09-28T13:14:59.713 に答える
1

codUsers.DataValueField idここで設定した文字列です。DataValueField="id"

あなたが探しているのはですcodUsers.SelectedValue

SQLステートメントに文字列連結を使用することは非常に悪い考えであることに注意してください。「ADO.NETParameterizedQueries」をグーグルですばやく検索すると、このテーマに関する古いチュートリアルが見つかりました。データアクセスにプレーンなADO.NETを使用してからしばらく経ちましたが、まだ多くの情報があると確信しています。

基本的には、文字列の連結だけでなく、クエリパラメータツールを使用してクエリを作成する必要があります。(SQLインジェクションの理由とパフォーマンスの理由の両方、および一般的にクリーンなコードであるため。)さらに一歩進んで、データアクセスにLINQtoSQLやEntityFrameworkなどを使用することをお勧めします。シーンを表示し、データベースに直接アクセスする代わりに、操作するオブジェクトモデルを提供します。

于 2012-09-28T13:15:32.853 に答える
0

使用のみ

codUsers.SelectedItem.Text

ドロップダウンリストのフィールドデータとして返されます

于 2017-08-25T17:14:48.970 に答える