DropDownList GridView filter not working

In the web application I'm working on, I have two GridViews. Above the first GridView there is a DropDownList, which is used to filter offers based on user separation. This DropDownList no longer works after installing the second GridView inside the UpdatePanel control, and I don't know why and what is the relationship between this and this. Any idea?

Everything worked fine before adding a second GridView to the UpdatePanel control , but now the filter for filtering offers in the first GridView does not work. Any ideas? Any help please?

My ASP.NET Code:

<strong> Division </strong> <asp:DropDownList ID="ddlDivision" runat="server" AppendDataBoundItems="True" AutoPostBack="True" DataSourceID="sqlDataSourceDivision" DataTextField="DivisionShortcut" DataValueField="DivisionShortcut" Width="175px" EnableViewState="False"> <asp:ListItem Value="%">All</asp:ListItem> </asp:DropDownList> <br /> <br /> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ID" width="950px" CssClass="mGrid" AlternatingRowStyle-CssClass="alt" RowStyle-HorizontalAlign="Center" DataSourceID="SqlDataSource1" OnRowDataBound="GridView1_RowDataBound" > <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> <HeaderStyle Font-Bold = "true" ForeColor="Black" Height="20px"/> <Columns> <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" /> <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" /> <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> <asp:BoundField DataField="Username" HeaderText="Username" SortExpression="Username" /> <asp:BoundField DataField="DivisionShortcut" HeaderText="Division" SortExpression="DivisionShortcut" /> <asp:TemplateField HeaderText="Status"> <ItemTemplate> <asp:DropDownList ID="DropDownList" runat="server" DataSourceID="SqlDataSource2" Font-Bold="True" ForeColor="#006666" AppendDataBoundItems="false" DataTextField="Status" DataValueField="ID" AutoPostBack="true" OnDataBound="DropDownList_DataBound" OnSelectedIndexChanged ="DropDownList_SelectedIndexChanged"> </asp:DropDownList> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT dbo.SafetySuggestionsLog.ID, dbo.SafetySuggestionsLog.Title, dbo.SafetySuggestionsLog.Description, dbo.employee.Name, dbo.SafetySuggestionsLog.Username, dbo.Divisions.DivisionShortcut FROM dbo.employee INNER JOINdbo.SafetySuggestionsLog ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username INNER JOIN dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode" FilterExpression="[DivisionShortcut] like '{0}%'"> <FilterParameters> <asp:ControlParameter ControlID="ddlDivision" Name="DivisionShortcut" PropertyName="SelectedValue" Type="String" /> </FilterParameters> </asp:SqlDataSource> <%--For the DropDownList--%> <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT * FROM [SafetySuggestionsStatus]"> </asp:SqlDataSource> <%--Filtering by Division--%> <asp:SqlDataSource ID="sqlDataSourceDivision" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT [DivisionShortcut] FROM [Divisions]"></asp:SqlDataSource> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <Triggers> <asp:AsyncPostBackTrigger ControlID="ddlDivision" EventName="SelectedIndexChanged" /> </Triggers> <ContentTemplate> <br /> <p><h3><b><u>PMOD Divisions' Safety Suggestions List</u></b></h3> <p></p><br /> <asp:Panel ID="Panel1" runat="server"> <asp:GridView ID="GridView2" runat="server" AllowSorting="True" AlternatingRowStyle-CssClass="alt" AutoGenerateColumns="False" CssClass="mGrid" RowStyle-HorizontalAlign="Center" DataSourceID="SqlDataSource4" > <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> <HeaderStyle Font-Bold="true" ForeColor="Black" Height="20px" /> <Columns> <asp:BoundField DataField="SubmittedMonth" HeaderText="Month Submitted" ReadOnly="True" SortExpression="SubmittedMonth" /> <asp:BoundField DataField="DivisionShortcut" HeaderText="Division" SortExpression="DivisionShortcut" /> <asp:BoundField DataField="Username" HeaderText="NetworkID" SortExpression="Username" /> <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" /> <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" /> <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" /> </Columns> <RowStyle HorizontalAlign="Center" /> </asp:GridView> </asp:Panel> <asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT TOP (100) PERCENT LEFT(DATENAME(month, dbo.SafetySuggestionsLog.DateSubmitted), 3) + '-' + DATENAME(year, dbo.SafetySuggestionsLog.DateSubmitted) AS SubmittedMonth, dbo.Divisions.DivisionShortcut, dbo.SafetySuggestionsLog.Username, dbo.employee.Name, dbo.SafetySuggestionsLog.Title, dbo.SafetySuggestionsLog.Description, dbo.SafetySuggestionsType.Type, dbo.SafetySuggestionsStatus.Status FROM dbo.Divisions INNER JOIN dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode INNER JOIN dbo.SafetySuggestionsLog ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username INNER JOIN dbo.SafetySuggestionsType ON dbo.SafetySuggestionsLog.TypeID = dbo.SafetySuggestionsType.ID INNER JOIN dbo.SafetySuggestionsStatus ON dbo.SafetySuggestionsLog.StatusID = dbo.SafetySuggestionsStatus.ID WHERE (DATEDIFF(month, dbo.SafetySuggestionsLog.DateSubmitted, GETDATE()) &lt; 3) ORDER BY dbo.SafetySuggestionsLog.DateSubmitted DESC"> </asp:SqlDataSource> <asp:Button ID="btnPrint" runat="server" OnClick="btnPrint_Click" Text="Print" /> <p></p></p> </ContentTemplate> </asp:UpdatePanel> 

Code-Behind:

 protected void btnPrint_Click(object sender, EventArgs e) { Session["ctrl"] = Panel1; ScriptManager.RegisterStartupScript(GridView2, GridView2.GetType(), "onclick", "window.open('Print.aspx','PrintMe','height=400px,width=800px,scrollbars=1');", true); } int i = 1; protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Cells[0].Text = i.ToString(); i++; } } protected void DropDownList_DataBound(object sender, EventArgs e) { if (!IsPostBack) ((DropDownList)sender).Items.Insert(0, new ListItem("--Select--", "")); } protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e) { DropDownList ddl = (DropDownList)sender; int suggestionStatus = int.Parse(ddl.SelectedValue); GridViewRow row = (GridViewRow)ddl.NamingContainer; string strID = GridView1.DataKeys[row.RowIndex]["ID"].ToString(); int ID = Int32.Parse(strID); //For inserting the status in the database string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=psspdbTest;Integrated Security=True"; string updateCommand = "UPDATE SafetySuggestionsLog SET [StatusID] = @StatusID WHERE [ID] = @ID"; using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(updateCommand, conn)) { cmd.Parameters.Clear(); cmd.Parameters.AddWithValue("@StatusID", suggestionStatus); cmd.Parameters.AddWithValue("@ID", ID); cmd.ExecuteNonQuery(); } conn.Close(); } GridView2.DataBind(); } 
+4
source share
4 answers

why aren't you trying to put your DropDownList inside the update panel and add a postback trigger to DropDownList too

0
source

The grid you want to fill must be in the update panel


You should also consider UpdateMode in the update panel, as this is Always by default


You might be missing the gridview 1 binding in the DropDownList handler

0
source

I think what happened is that once you set ddlDivision as a trigger for your UpdatePanel, it will no longer perform normal postback. Instead, this will lead to a partial reverse process of UpdatePanel. Since your Gridview1 is not included in the UpdatePanel ContentTemplate , it will no longer be updated after the postback. The way UpdatePanel works - they only return changes to the elements inside them, not the other elements on the page.

Before you put a UdpatePanel with a dropdown as a trigger, the AutoPostback parameter on ddlDivision would cause your whole page to refresh and your gridview would be filtered out because your data source uses ddl as a parameter.

0
source

First of all, have you added ScriptManager?

Anyway, looking at your code, I see that you added AsyncPostBackTrigger for ddlDivision , but you have not yet raised the SelectedIndexChanged event for ddlDivision , try the following:

 <asp:DropDownList ID="ddlDivision" runat="server" AppendDataBoundItems="True" AutoPostBack="True" DataSourceID="sqlDataSourceDivision" DataTextField="DivisionShortcut" DataValueField="DivisionShortcut" Width="175px" EnableViewState="False" OnSelectedIndexChanged="ddlDivision_SelectedIndexChanged"> <asp:ListItem Value="%">All</asp:ListItem> </asp:DropDownList> 

and then of course add your code to handle the event.

0
source

Source: https://habr.com/ru/post/1401316/


All Articles