0

「Web ドロップ コース」オプションが選択されている場合、グリッドビューから行を削除しようとしています。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。誰でも問題を見ることができますか?

ありがとう

4

2 に答える 2

2

ポストバックでデータを再バインドすることを保護していない可能性が最も高いです。ポストバックを発生させるイベントが発生すると、この前にページ読み込みイベントが発生します。ポストバックのチェックなしでページの読み込みをバインドしている場合は、基本的にデータをリセットしてからイベント ハンドラーに入ります。

ページのライフ サイクルを読むとよいかもしれません: ページのライフ サイクル

于 2013-06-02T05:00:31.027 に答える
1

以前の投稿を考慮して、ポストバックごとにグリッドビューを再バインドしています。これらの行を!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 に答える