Pages

Friday, November 25, 2011

Code for displaying columns of the gridview based on the columns checked in the Listbox.

Here is the code for displaying columns of the gridview based on the columns checked in the Listbox. This will by default display one column in the gridview and one checkbox ticked in checkbox list. On selecting other checkboxes i.e. firstname, last name, age,gender the columns become visible in the gridview.
<div>
<asp:CheckBoxList ID="chkColumns" runat="server">
</asp:CheckBoxList>
<asp:Button ID="btnShow" runat="server" Text="Show" OnClick="btnShow_Click" />
</div>
<a href="javascript:void(0);">Click</a>
<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">
<Columns>
    <asp:BoundField DataField="id" HeaderText="id" />
</Columns>
</asp:GridView>

    public static DataTable dt;// = new DataTable();
    public static ArrayList existing = new ArrayList();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            createtable();
        }
    }
    private void createtable()
        {
            dt = new DataTable();
            dt.Columns.Add("id");
            dt.Columns.Add("firstname");
            dt.Columns.Add("lastname");
            dt.Columns.Add("age");
            dt.Columns.Add("gender");
            object[] d1 = {"1","a","a1","10","M" };
            object[] d2 = { "2", "b", "b1", "20", "F" };
            object[] d3 = { "3", "c", "c1", "30", "M" };
            object[] d4 = { "4", "d", "d1", "40", "F" };
            dt.Rows.Add(d1);
            dt.Rows.Add(d2);
            dt.Rows.Add(d3);
            dt.Rows.Add(d4);
            GridView1.DataSource = dt;
            GridView1.DataBind();
            bindCheckbox();
            AddVisibleColumnsToArray();
            MarkCheckedInArrayForVisibleColumns();
        }
    private void bindCheckbox()
        {
            chkColumns.DataSource = dt.Columns;
            chkColumns.DataBind();
    }
    private void AddVisibleColumnsToArray()
        {
            GetColumnByDBName(GridView1);
        }
        private void MarkCheckedInArrayForVisibleColumns()
        {
            foreach (ListItem item in chkColumns.Items)
            {
                if (existing.Contains(item.Value))
                    item.Selected = true;
            }
        }
    protected void btnShow_Click(object sender, EventArgs e)
        {
            ArrayList arr =new ArrayList();
            HideGridviewColumns(GridView1,arr);
            foreach (ListItem item in chkColumns.Items)
            {
                if (item.Selected)
                {
                    BoundField b = new BoundField();
                    b.DataField = item.Value;
                    b.HeaderText = item.Value;
                    GridView1.Columns.Add(b);
                }
            }
            GridView1.DataSource = dt;
            GridView1.DataBind();
            AddVisibleColumnsToArray();
            MarkCheckedInArrayForVisibleColumns();
    }
    public void GetColumnByDBName(GridView aGridView)
        {
            existing.Clear();
            System.Web.UI.WebControls.BoundField DataColumn;
   
            for (int Index = 0; Index < aGridView.Columns.Count; Index++)
            {
                DataColumn = aGridView.Columns[Index] as System.Web.UI.WebControls.BoundField;
   
                if (DataColumn != null)
                {
                    if (DataColumn.Visible)
                    {
                        if (!existing.Contains(DataColumn.HeaderText))
                            existing.Add(DataColumn.HeaderText);
                    }
                }
            }
        }
   

No comments:

Post a Comment