0

我正在尝试创建两个下拉列表,第一个带有用户列表,第二个只有当我单击“确定”按钮时才可见,显示用户的帐户列表。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;

DataValueField将在将值字段分配给 DropDownList 时使用。

DataTextField用于文本字段。

于 2012-09-28T13:14:59.713 回答
1

codUsers.DataValueField id您在此处设置的字符串:DataValueField="id"

您正在寻找的是codUsers.SelectedValue.

另请注意,对 SQL 语句使用字符串连接是一个非常糟糕的主意。在 Google 上快速搜索“ADO .NET Parameterized Queries”,找到了关于该主题的旧教程。自从我使用纯 ADO.NET 进行数据访问以来已经有一段时间了,但我确信那里仍然有很多信息。

基本上,您想使用查询参数工具来构建查询,而不仅仅是字符串连接。(出于 SQL 注入原因和性能原因,以及一般而言更简洁的代码。)虽然我建议更进一步,并使用 LINQ to SQL 或实体框架之类的东西进行数据访问,这会为您在后面进行参数化场景并简单地为您提供一个可以使用的对象模型,而不是直接访问数据库。

于 2012-09-28T13:15:32.853 回答
0

仅使用

codUsers.SelectedItem.Text

它将返回,因为它是下拉列表字段数据

于 2017-08-25T17:14:48.970 回答