我正在尝试根据OnSelectedIndexChanged
的{{1}}事件加载/重新加载GridView。 ddl将DropDownList
设置为true,但仍然不会加载Grid,除非我将其封装在AutoPostBack
中。但是一旦我这样做,我的FileUpload控件就会停止工作......这个问题的最佳解决方案是什么?
**编辑**相关代码:
aspx文件
UpdatePanel
代码隐藏
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:UpdatePanel ID="upProva" runat="server">
<ContentTemplate>
<%--user control for data selection--%>
<asp:DropDownList ID="ddlAula" runat="server" DataTextField="nmAula" DataValueField="idAula"
CssClass="medio" Enabled="false" AutoPostBack="true" OnSelectedIndexChanged="ddlAula_OnSelectedIndexChanged">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
<asp:GridView ID="gvQuestoes" runat="server" AutoGenerateColumns="False" CssClass="gv"
AllowSorting="false" DataKeyNames="idQuestao" OnRowCommand="gvQuestao_RowCommand">
<Columns>
<%--(...)--%>
</Columns>
</asp:GridView>
<asp:Button ID="btnSalvar" runat="server" ToolTip="Salvar" CssClass="botao40 salv40"
OnClick="btnSalvar_Click" ValidationGroup="trabalho" />
<asp:FileUpload ID="fuAnexo" runat="server" CssClass="fileOriginal" />
</asp:Content>
DataSource / Databinding是正确的(我知道,因为我已经在页面上添加了一个按钮,并在Button _Click事件上使用了相同的绑定代码,并且它有效。)
答案 0 :(得分:1)
您需要在OnSelectedIndexChanged
事件中重新绑定gridview。像
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
//Do your processing logic
gridview1.DataSource = new_modified_datasource;
gridview1.DataBind();
}
答案 1 :(得分:0)
我发现使用PostBackTrigger非常简单(虽然并非在所有情况下都不理想):
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:UpdatePanel ID="upProva" runat="server">
<ContentTemplate>
<%--user control for data selection--%>
<asp:DropDownList ID="ddlAula" runat="server" DataTextField="nmAula" DataValueField="idAula"
CssClass="medio" Enabled="false" AutoPostBack="true" OnSelectedIndexChanged="ddlAula_OnSelectedIndexChanged">
</asp:DropDownList>
<asp:GridView ID="gvQuestoes" runat="server" AutoGenerateColumns="False" CssClass="gv"
AllowSorting="false" DataKeyNames="idQuestao" OnRowCommand="gvQuestao_RowCommand">
<Columns>
<%--(...)--%>
</Columns>
</asp:GridView>
<asp:FileUpload ID="fuAnexo" runat="server" CssClass="fileOriginal" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="btnSalvar" />
</Triggers>
</asp:UpdatePanel>
</asp:Content>
答案 2 :(得分:0)
您的代码中没有任何地方显示您如何填充ddlAula
。所以这是我的答案:您显示的Page_Load
是缩写的,实际上您正在填充ddlAula
。此外,您每次都这样做,而不是检查IsPostBack
。因此,当您点击ddlAula
的事件处理程序时,列表已重置,并且您选择的值不再被选中。
如果我的回答是正确的,您需要在Page_Load
中添加支票:
if (!IsPostBack)
{
//populate ddlAula
}