Gridview选择的值总是返回0?

时间:2013-06-02 04:47:12

标签: asp.net database gridview

如果选择“Web drop course”选项,我试图从gridview中删除一行。这是UI:

enter image description here

代码:

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。有谁能看到这个问题?

由于

2 个答案:

答案 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();     
    }
}