我的下拉列表选择的索引已更改未运行

时间:2017-02-08 10:21:07

标签: c# asp.net webforms

所以,我在gridview中有一个下拉列表如下:

<asp:GridView runat="server" ID="gvPrevActionPlans" CssClass="table table-striped table-hover" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="REC_ID" HeaderText="Record ID" />
        <asp:BoundField DataField="ACTIONPLAN" HeaderText="Action Plan" />
        <asp:BoundField DataField="REQDATE" HeaderText="Target Date" />

        <asp:TemplateField HeaderText="Progress">
            <ItemTemplate>
                <asp:DropDownList ID="ddAPUpdate" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddAPUpdate_OnSelectedIndexChanged">
                    <asp:ListItem>In Progress</asp:ListItem>
                    <asp:ListItem>Deadline Not Met</asp:ListItem>
                    <asp:ListItem>Completed</asp:ListItem>
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>

    </Columns>
</asp:GridView>

c#如果你很好奇:

protected void ddAPUpdate_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        if (IsPostBack) return;
        if (gvPrevActionPlans.Rows.Count == 0) return;
        for (var i = 0; i < gvPrevActionPlans.Rows.Count; i++)
        {
            var ddStatus = (DropDownList)gvPrevActionPlans.Rows[i].FindControl("ddAPUpdate");
            var constr = ConfigurationManager.ConnectionStrings["DATABASENAMEHERE(kept out for security reasons)"].ConnectionString;
            using (var con = new SqlConnection(constr))
            {
                try
                {
                    var cmd =
                        new SqlCommand(
                            "SqlQueryHere")
                        {
                            CommandType = CommandType.Text,
                            Connection = con
                        };


                    //Parameters added Here


                    con.Open();
                    if (ddStatus.SelectedItem.ToString() != "In Progress")
                    {
                        cmd.ExecuteNonQuery();
                    }
                }
                catch (SqlException ex)
                {
                    string errorMsg = "Error in Insert";
                    errorMsg += ex.Message;
                    throw new Exception(errorMsg);
                }
                finally
                {
                    con.Close();
                }


            }
        }
    }

我已经尝试过添加 AutoPostback = true EnabledViewState = true ,当我在eventhandler上设置断点时它永远不会中断,所以我假设下拉列表实际上没有触发事件,虽然没有线索?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

您可能没有在IsPostBack检查中包装GridView的数据绑定。如果你没有,它会在每次加载页面时将所有DropDowns设置回默认值,并且不会触发SelectedIndexChanged

if (!IsPostBack)
{
    gvPrevActionPlans.DataSource = source;
    gvPrevActionPlans.DataBind();
}

您仍需要将AutoPostBack="true"OnSelectedIndexChanged="ddAPUpdate_SelectedIndexChanged"添加到DropDown。

<强>更新

这一行将导致该方法永远不会继续执行,因为它总是一个PostBack。它始终是真的,因此总是在第一行返回。

if (IsPostBack) return;

自己测试

protected void Button1_Click(object sender, EventArgs e)
{
    if (IsPostBack) return;

    //the label will never change since a button click is a PostBack and immediately returned
    Label1.Text = "This is a test";
}

答案 1 :(得分:0)

尝试在标记上添加事件和AutoPostback(再次):

<asp:DropDownList ID="ddAPUpdate" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddAPUpdate_OnSelectedIndexChanged">

希望它有所帮助!

答案 2 :(得分:0)

尝试dropdown selectedindexchanged活动

中此链接的代码

fetch dropdownlist from gridview