【问题标题】:Unable to get dropdown selected value无法获取下拉选择值
【发布时间】:2014-03-27 14:35:20
【问题描述】:

我有一个 gridview,每行都有一个下拉列表。 DDL 填充了一个从 1 开始的数字 - 有多少行。

我有一个保存按钮,可以使用一个简单的循环为每一行保存每个 DDL 的值,但问题是下拉菜单从不返回所选值,它似乎返回类似于 gridview + 1 的行索引的东西。

这是我如何选择行中的值的示例:

3 7 4 6 5 2 1

当我这样做时,他们会这样保存:

2 3 4 5 6 7 1

这是我保存的代码,只是为了让你知道我已经尝试过 selectedvalue、selectedindex、selecteditem 和 text,它们都是一样的。

//save the data
            foreach (GridViewRow r in gvOrder.Rows)
            {
                if (r.RowType == DataControlRowType.DataRow)
                {
                    //get the details from the grid
                    Label lblED = r.FindControl("lblED") as Label;
                    DropDownList ddl = r.FindControl("ddlNewO") as DropDownList;
                    TextBox txt = r.FindControl("txtNewT") as TextBox;
                    Label ID = r.FindControl("lblID") as Label;
                    int Order = Convert.ToInt16(ddl.SelectedValue);
                    string Text = "";
                    if (txt.Text != "")
                    {
                        Text = txt.Text;
                    }
                    //save each row to the db

                    try
                    {
                        SqlConnection dbConnection = new SqlConnection();
                        dbConnection.ConnectionString = GetConnection.GetConnectionString();
                        SqlCommand dbCommand = new SqlCommand("PL_UserColumns_Save", dbConnection);
                        dbCommand.CommandType = CommandType.StoredProcedure;
                        dbCommand.Parameters.Add("@PageID", SqlDbType.Int).Value = Convert.ToInt16(constPageID);
                        dbCommand.Parameters.Add("@UserID", SqlDbType.Int).Value = Convert.ToInt16(strUserID);
                        dbCommand.Parameters.Add("@Order", SqlDbType.Int).Value = Convert.ToInt16(Order);
                        dbCommand.Parameters.Add("@ColumnID", SqlDbType.Int).Value = Convert.ToInt16(ID.Text);
                        dbCommand.Parameters.Add("@ED", SqlDbType.Int).Value = Convert.ToInt16(lblED.Text);
                        dbCommand.Parameters.Add("@Text", SqlDbType.NVarChar).Value = "'" + Text + "'";
                        dbConnection.Open();
                        dbCommand.ExecuteNonQuery();
                        dbConnection.Close();
                    }
                    catch (SqlException ex)
                    {
                        ExceptionHandling.SQLException(ex, constPageID, constIsSiteSpecific);
                    }
                }
            }

【问题讨论】:

  • 一开始你是如何绑定这些值的?
  • 这很复杂,但是它们填充在 rowdatabound 中,并且每一行都有一个数字,所以如果我有 8 行,每个 DDL 填充 1-8。然后将选定的索引设置为行索引,但这并不重要。
  • @connersz: 你试过用'ddl.SelectedItem.ToString()'代替'ddl.SelectedValue'吗?

标签: c# asp.net gridview


【解决方案1】:

要获得 DropDownList 选择的值,您必须使用此:

ddl.SelectedItem.Value

【讨论】:

  • 我试过了,但由于某种原因,值 1 出现了两次,它总是出现在最后一行保存时。
  • 这是我选择的值的顺序:1,3,5,4,6,2。我点击了保存,这就是它按顺序保存每个下拉菜单的方式:1,3,4,5,6,1
【解决方案2】:

您可以查看Request.Form 以获取发布的值。假设您的下拉名称将随着每一行而增加,例如ddlNew0、ddlNew1等,那么你就可以这样做了

 var value = Request.Form["ddlNew" + rowIndex];

【讨论】:

  • 您可能需要使用调试器来获得正确的名称,因为它们可能会像 ctl00_ddlNew5 这样出现。
  • I just did a test which shows it is not just the row index now, when the numbers selected are like this: 1,3,5,4,6,2 on saving they come out in this order: 1,3,4,5,6,1 这没有意义。
【解决方案3】:

我会以两种可能的方式做到这一点:

  1. 添加一点 JavaScript 来填充隐藏字段,然后在后端抓取并分离值
  2. 在下拉列表和onClick 方法上添加自动回发。还将项目 ID 作为参数传递。然后在 onclick 方法中进行保存位。

我更喜欢第二个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2023-03-26
    • 2019-06-02
    • 1970-01-01
    • 2019-10-19
    相关资源
    最近更新 更多