我正在尝试创建两个下拉列表,第一个包含用户列表,第二个只在我单击确定按钮时显示,显示用户的帐户列表。 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”而不是索引的值....
答案 0 :(得分:3)
使用:
`codUsers.SelectedValue` instead of `codUsers.DataValueField`
或者
codUsers.SelectedItem.Value
或者
codUsers.Items[codUsers.SelectedIndex].Value
答案 1 :(得分:3)
尝试
codUsers.SelectedValue;
这个适合你。
答案 2 :(得分:1)
尝试使用codUsers.SelectedValue;
sourceAccounts.SelectCommand = "SELECT code, id FROM accounts WHERE ID_user=" +
codUsers.SelectedValue;
您正在为可能的SQL Injection tho做好准备。 (也许不是在这种特殊情况下,因为你得到的是一个预先定义的值,但是假设这个值来自一个文本框,你会更好地使用参数化查询:
string myVariable = someTextBox.Text;
string sqlString = "Select something from someTable where someField=@someVariable";
oCmd.Parameters.AddWithValue("@someVariable", myVariable);
答案 3 :(得分:1)
应该是.SelectedValue
财产。
所以SelectCommand将如下:
sourceAccounts.SelectCommand = "SELECT code, id FROM accounts WHERE ID_user=" +
codUsers.SelectedValue;
DataValueField
将在分配值字段时用于DropDownList。
和
DataTextField
用于文字字段。
答案 4 :(得分:1)
codUsers.DataValueField
字符串id
,您在此处设置:DataValueField="id"
您要找的是codUsers.SelectedValue
。
请注意,对SQL语句使用字符串连接是一个非常坏主意。 Google的快速搜索“ADO .NET参数化查询”出现了an old tutorial on the subject。自从我使用普通的ADO.NET进行数据访问以来已经有一段时间了,但我确信还有很多信息。
基本上,您希望使用查询参数工具来构建查询,而不仅仅是字符串连接。 (两者都是出于SQL注入的原因和出于性能原因,以及一般都是更干净的代码。)虽然我建议更进一步,使用LINQ to SQL或Entity Framework等数据访问,这背后为您进行参数化场景,只是给你一个对象模型,而不是直接数据库访问。
答案 5 :(得分:0)
仅限使用
codUsers.SelectedItem.Text
它将返回,因为它是dropdownlist字段数据