如果选择“Web drop course”选项,我试图从gridview中删除一行。这是UI:
代码:
for (int i = 0; i < showCourses.Rows.Count; i++)
{
if (((DropDownList)showCourses.Rows[i].FindControl("actionmenu")).SelectedValue == "1")
{
dropList.Add(showCourses.Rows[i].Cells[2].Text +showCourses.Rows[i].Cells[3].Text );
}
}
以下是下拉列表:
<asp:ListItem Selected="True" Value="0">No Action</asp:ListItem>
<asp:ListItem Value="1">Web Drop Course</asp:ListItem>
问题是,((DropDownList)showCourses.Rows[i].FindControl("actionmenu")).SelectedValue
总是返回0,无论我选择No action
还是Web drop course
。有谁能看到这个问题?
由于
答案 0 :(得分:2)
您很可能无法防止在回发时重新绑定数据。当您的事件导致回发触发时,页面加载事件将在此之前触发。如果您在页面加载中绑定而没有检查回发,则基本上是重置数据然后进入事件处理程序。
页面生命周期可能很好读:Page Life Cycle
答案 1 :(得分:1)
考虑到您的previous post,您将在每次回发时重新绑定gridview。用!IsPostback
条件包裹这些行。更好地将它们包装到一个方法(比如PopulateGrid()
)并调用它。然后,您可以在可能需要重新绑定数据的其他情况下重新调用该方法(例如OnPageIndexChanged
)。像这样更改Page_Load
方法:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
PopulateGrid();
}
}
private void PopulateGrid()
{
using (SqlConnection con = new SqlConnection())
{
con.ConnectionString = Userfunctions.GetConnectionString();
con.Open();
string query = "select * from RegisterTable where StudentID='" + MyGlobals.currentID + "'";
SqlDataAdapter adap = new SqlDataAdapter(query, con);
DataTable tab = new DataTable();
adap.Fill(tab);
showCourses.DataSource = tab;
showCourses.DataBind();
}
}