所以,我在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上设置断点时它永远不会中断,所以我假设下拉列表实际上没有触发事件,虽然没有线索?任何帮助将不胜感激。
答案 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
活动