0

如果选择了“Web drop course”选项,我正在尝试从 gridview 中删除一行。这是用户界面:

在此处输入图像描述

和代码:

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 actionWeb drop course

谢谢

4

2 回答 2

2

您很可能无法防止在回发时重新绑定您的数据。当触发回发的事件时,页面加载事件会在此之前触发。如果您在没有检查回发的情况下绑定页面加载,那么您基本上是在重置您的数据,然后进入您的事件处理程序。

页面生命周期可能是一个很好的阅读: 页面生命周期

于 2013-06-02T05:00:31.027 回答
1

考虑到您之前的帖子,您将在每次回发时重新绑定 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();     
    }
}
于 2013-06-02T05:02:12.893 回答