protected void gvitem_Sorting(object sender, GridViewSortEventArgs e)
        {
            switch (e.SortExpression)
            {
            case "Quantity":
                if (e.SortDirection == SortDirection.Ascending)
                {
                    DBOps db = new DBOps();

                    DataSet ds = db.ReadInventoryTable();
                    // For the future : - DataTable dt = ((DataSet)ViewState["gvitem"]).Tables["table"];
                    var query = from row in ds.Tables["table"].AsEnumerable()
                                orderby row.Field <Int64>("Quantity")
                                select row;     // Asc query for Melder field;

                    DataTable result = query.CopyToDataTable();
                    Session["SortedView"] = result;

                    gvitem.DataSource = result;
                    gvitem.DataBind();
                }
                else
                {
                    DBOps db = new DBOps();

                    DataSet ds = db.ReadInventoryTable();
                    //DataTable dt = ((DataSet)ViewState["gvitem"]).Tables["table"];
                    var query = from row in ds.Tables["table"].AsEnumerable()
                                orderby row.Field <Int64>("Quantity") descending
                                select row;     // Desc query for Melder field ;

                    DataTable result = query.CopyToDataTable();
                    Session["SortedView"] = result;

                    gvitem.DataSource = result;
                    gvitem.DataBind();
                }
                break;

            // case statements for your other fields.
            case "Category":
                if (e.SortDirection == SortDirection.Ascending)
                {
                }
                else
                {
                }
                break;
            }
        }
        protected void btnSearch_Click(object sender, EventArgs e)
        {
            string col  = ddlColumn.SelectedValue;
            var    type = from d in searchColumns.Tables["Table"].AsEnumerable()
                          where d.Field <string>("name") == col
                          select d.Field <string>("type");

            Type searchColumnType = GetMyType(type.ToArray()[0]);

            DBOps   db = new DBOps();
            DataSet ds = db.ReadInventoryTable();
            //DataSet ds = (DataSet)gvitem.DataSource;
            DataTable dt = ds.Tables["Table"];
            DataTable result;


            if (searchColumnType == typeof(int))
            {
                var query = from row in dt.AsEnumerable()
                            where row.Field <Int64>(col) == Int64.Parse(txtSearchtext.Text)
                            select row;
                result = query.CopyToDataTable();
            }
            else
            {
                var query = from row in dt.AsEnumerable()
                            where row.Field <string>(col).Contains(txtSearchtext.Text)
                            select row;
                result = query.CopyToDataTable();
            }


            int count = result.Rows.Count;

            lblSearchInfo.Text = count.ToString() + " row(s) matched";
            lblSearchInfo.DataBind();

            dgSearchResult.DataSource = result;
            dgSearchResult.DataBind();
        }
        protected void RefreshTable()
        {
            try
            {
                if (ddlLabselect.SelectedValue == "All")
                {
                    DBOps db = new DBOps();

                    DataSet ds = db.ReadInventoryTable();
                    gvitem.DataSource = ds;
                    gvitem.DataBind();
                    ViewState["gvitems"] = ds;
                }
                else
                {
                    DBOps db = new DBOps();
                    //DataSet ds = (DataSet)ViewState["gvitems"];    // Apparently grid view items are not stored persistently across postabacks so then either I have to hit the db again or use the viewstate i.e. gvitems.DataSource doesnt work here
                    DataSet   ds    = db.ReadInventoryTable();
                    DataTable dt    = ds.Tables["Table"];
                    var       query = from row in dt.AsEnumerable()
                                      where row.Field <string>("lab") == (ddlLabselect.SelectedValue)
                                      select row;
                    DataTable result = query.CopyToDataTable();

                    gvitem.DataSource = result;
                    gvitem.DataBind();
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("no rows"))
                {
                    lblPageInfo.Text = "There are no items in this lab";
                    lblPageInfo.DataBind();
                }
            }
        }