如何在c#文件中获取asp Dropdownlist选择的值?

时间:2012-08-31 13:54:07

标签: c# asp.net

我的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时。它显示所选索引而不是值。为什么呢?

3 个答案:

答案 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);