【发布时间】: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'吗?