0

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

4

3 回答 3

1

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

DataSourceID="SqlDataSource5"  <---

<asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:ProdDB %> # blah blah query
 </asp:SqlDataSource>
于 2012-08-31T13:56:35.733 回答
0

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

    var value = Request.Form[DropDownListnew.UniqeID];
    var text = DropDownListnew.Items.FindByValue(value);
于 2012-08-31T14:22:21.207 回答
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 位。

于 2012-08-31T14:04:20.987 回答