繁体   English   中英

如何在C#文件中获取ASP Dropdownlist选定值?

[英]How to get asp Dropdownlist selected value in c# file?

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

您在sqdatasource上存在不匹配错误,请替换为SqlDataSource4

DataSourceID="SqlDataSource5"  <---

<asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:ProdDB %> # blah blah query
 </asp:SqlDataSource>

如果将下拉列表上的AutoPostback属性设置为true,并将ViewStateMode设置为继承,则应获取所选的值。 我尝试了这一点,并成功了。 由于您已经具有SqlDataSource,并且dropdownlist的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位。

您可以尝试从Request.Form对象获取值,并使用ddl.Items.FindByValue方法获取文本。

    var value = Request.Form[DropDownListnew.UniqeID];
    var text = DropDownListnew.Items.FindByValue(value);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM