我有一个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);
}
}
}
答案 0 :(得分:0)
要获取DropDownList选择的值,您必须使用它:
ddl.SelectedItem.Value
答案 1 :(得分:0)
您可以查看Request.Form
以获取发布的值。假设您的下拉名称会随着每一行而增加,例如ddlNew0,ddlNew1等,那么你可以这样做
var value = Request.Form["ddlNew" + rowIndex];
答案 2 :(得分:0)
我会以两种可能的方式做到这一点:
onClick
方法上添加自动回发功能。还将项id作为参数传递。然后在onclick方法中执行保存位。 我更喜欢第二个。