我的aspx
页面中有一个关注下拉列表:
<asp:DropDownList ID="OrderPeriodStatus" runat="server" AutoPostBack="true"
CssClass="ddlb" Width="100px" Height="30px" DataSourceID="SqlDataSource5"
DataTextField="OrderPeriod" DataValueField="OrderPeriodID" onselectedindexchanged="OrderPeriodStatus_SelectedIndexChanged">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource5" runat="server" ConnectionString="<%$ ConnectionStrings:ProdDB %> # blah blah query
</asp:SqlDataSource>
我尝试通过以下代码访问C#中所选值的值:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ProcessEligibleScenarios();
LoadOptions();
ddlbPeriod.DataBind();
GridView1.DataBind();
gvActiveLogs.DataBind();
}
}
protected void OrderPeriodStatus_SelectedIndexChanged(object sender, EventArgs e)
{
if (OrderPeriodStatus.SelectedValue != null)
{
SqlConnection myConn = default(SqlConnection);
SqlCommand myComm = default(SqlCommand);
myConn = new SqlConnection(ConfigurationManager.ConnectionStrings["ProdDB"].ConnectionString);
myConn.Open();
myComm = new SqlCommand("SELECT OrderPeriodDate, OrderPeriodStatus, Notes FROM OrderPeriod WHERE OrderPeriod ='" + OrderPeriodStatus.SelectedValue + "'");
try
{
myComm.Connection = myConn;
SqlDataReader Dr = myComm.ExecuteReader();
while (Dr.Read())
{
System.Diagnostics.Debug.Write("While reading the data");
TextBox1.Text = Dr["OrderPeriodDate"].ToString();
TextBox2.Text = Dr["OrderPeriodStatus"].ToString();
NotesArea.Value = (string)Dr["Notes"];
System.Diagnostics.Debug.WriteLine(OrderPeriodStatus.SelectedValue);
}
Dr.Close();
myConn.Close();
}
catch (SqlException sqx)
{
}
GridView1.DataBind();
}
else { }
}
但是当我打印value
时。它显示所选索引而不是值。为什么呢?
答案 0 :(得分:1)
您在sqdatasource上存在不匹配错误,请替换为SqlDataSource4
DataSourceID="SqlDataSource5" <---
<asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:ProdDB %> # blah blah query
</asp:SqlDataSource>
答案 1 :(得分:0)
如果将下拉列表中的AutoPostback属性设置为true,并且要继承ViewStateMode,则应获取所选的值。我在我这边尝试过,而且很有效。由于您已经拥有SqlDataSource,并且下拉列表的DataSourceId设置为SqlDataSource,因此应该自动填充它。
---修改
对不起,我想我可能误解了你的问题。如果您改为使用
DropDownListnew.SelectedItem.Text
你应该得到你想要的文本值。
- 另一个编辑:
@Amit,您将从SelectedValue获取索引,因为在您的下拉列表代码中,您已设置
DataValueField="OrderPeriodID"
这基本上是您的主键或索引。要获取文本值而不是索引,您必须使用
SelectedItem.Text
同样在您的查询中:
myComm = new SqlCommand("SELECT OrderPeriodDate, OrderPeriodStatus, Notes FROM OrderPeriod WHERE OrderPeriod ='" + OrderPeriodStatus.SelectedValue + "'");
我认为你应该使用
WHERE OrderPeriodID ='" + OrderPeriodStatus.SelectedValue + "'");
您在OrderPeriod之后缺少ID位。
答案 2 :(得分:0)
您可以尝试从Request.Form
对象获取值并使文本使用ddl.Items.FindByValue
方法
var value = Request.Form[DropDownListnew.UniqeID];
var text = DropDownListnew.Items.FindByValue(value);