如何动态地重新加载基于DropDownList选择的GridView

时间:2014-08-15 18:00:23

标签: c# asp.net gridview

我正在尝试根据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事件上使用了相同的绑定代码,并且它有效。)

3 个答案:

答案 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
}