Search code examples
c#gridviewdropdownlistfor

How to compare DropDown value and GridView column value, and hide if they are different


How to compare DropDownList value and GridView column value, and hide if they are different?

I have 5 columns. In the first and in the second are values from DropdownList, and the others are results from some DMX query. I should hide the values in third column if they are not the same as the user select in DropDownList

I tried many solutions, but they do not work. Last, I tried this function. Thank you in advance!

private void GenerateUniqueData() {

    for (int i = 0; i < GridView1.Rows.Count; i++)
    {

        DataControlFieldCell cell = GridView1.Rows[i].Cells[2] as DataControlFieldCell;
        if (cell.Text!=DropDownList6.SelectedItem.Value)
            GridView1.Rows[i].Visible = false;
    }

} 

Solution

  • Take a look at this article. Too much to cover here: http://www.codeproject.com/Articles/43727/Show-Hide-GridView-Columns-in-ASP-NET

    Edit: Let's try it in plain ASP.NET with code behind: First thing to check, did you switch on AutoPostBack on the DropDownList? If there is no round trip to the server none of your code makes any difference, it will not get executed.

    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
    </asp:DropDownList>
    

    Here's a working example... HTML:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataGridTest.aspx.cs" Inherits="DataGridTest" %>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
                onselectedindexchanged="DropDownList1_SelectedIndexChanged">
            </asp:DropDownList>
            <br />
            <br />
            <asp:GridView ID="GridView1" runat="server">
            </asp:GridView>
        </div>
        </form>
    </body>
    </html>
    

    Code Behind:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    
    public partial class DataGridTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                List<string> ddData = new List<string>();
                ddData.Add("Col 21");
                ddData.Add("Col 22");
                ddData.Add("Col 23");
    
                this.DropDownList1.DataSource = ddData;
                this.DropDownList1.DataBind();
    
                DataTable gridData = new DataTable();
                gridData.Columns.Add("Description");
                gridData.Columns.Add("Column 1");
                gridData.Columns.Add("Column 2");
                gridData.Columns.Add("Column 3");
    
                gridData.Rows.Add("Row 1", "Col 11", "Col 21", "Col 31");
                gridData.Rows.Add("Row 2", "Col 12", "Col 22", "Col 32");
                gridData.Rows.Add("Row 3", "Col 13", "Col 23", "Col 33");
                gridData.Rows.Add("Row 3", "Col 14", "Col 22", "Col 34");
    
                this.GridView1.DataSource = gridData;
                this.GridView1.DataBind();
            }
        }
    
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < this.GridView1.Rows.Count; i++)
            {
                this.GridView1.Rows[i].Visible = true;
    
                string cellvalue = GridView1.Rows[i].Cells[2].Text;
                if (cellvalue.TrimEnd() != this.DropDownList1.SelectedItem.Value.TrimEnd())
                    GridView1.Rows[i].Visible = false;
            }
        }
    }