无法获得下拉选择值

时间:2014-03-27 14:35:21

标签: c# asp.net gridview

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

我有一个保存按钮,使用一个简单的循环保存每行的每个DDL的值,但问题是下拉列表永远不会返回所选的值,它似乎返回类似gridview + 1的行索引。

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

3 7 4 6 五 2 1

当我这样做时,他们将如何保存:

2 3 4 五 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);
                    }
                }
            }

3 个答案:

答案 0 :(得分:0)

要获取DropDownList选择的值,您必须使用它:

ddl.SelectedItem.Value

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

  1. 添加一些JavaScript以填充隐藏字段,然后抓取并分离后端中的值
  2. 在下拉菜单和onClick方法上添加自动回发功能。还将项id作为参数传递。然后在onclick方法中执行保存位。
  3. 我更喜欢第二个。