Непоследовательное поведение в Webform - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь показать данные из моего первого объекта LINQ DB в виде таблицы. У меня есть кнопка поиска и селектор типа фильтра, но я не могу отобразить результаты каждый раз, иногда мне приходится дважды нажимать кнопку, а иногда она перестает работать: я думаю, это будет очевидно, что я нуб, каккачество кода по общему признанию позорное.

namespace DBWeb
{    
    public partial class UsersToApps : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                 FillLstbxSearchType();
            }
            runEvents();
        }

        public static int webState = 0; 

        protected void runEvents()
        {
            if(webState == 0)
            {
                WebShowUsers(null); // on first page load, show all users
            }
            else
            {
                WebShowUsers(umem); //on subsequent page load, show filtered users
            }
            webState = 1;
        }

        // For plotting List of user info to GridView
        protected void WebShowUsers(List<UserMembers> listofusers) 
        {
            UserAccessLayer userAccessLayer = new UserAccessLayer();
            gvUsers.DataSource = (listofusers != null ? listofusers : userAccessLayer.getUsers());
            //gvUsers.DataSource = userAccessLayer.getUsers();
            gvUsers.AutoGenerateColumns = false;
            gvUsers.DataKeyNames = new string[] { "ad_uid" } ;
            //gvUsers.Columns.Clear(); //alt use to clear existing columns before generating gv
            if (gvUsers.Columns.Count == 0)
            {
                BoundField bfUserID = new BoundField();
                bfUserID.HeaderText = "User ID";
                bfUserID.DataField = "ad_uid";
                gvUsers.Columns.Add(bfUserID);
                CommandField cmdSelect = new CommandField();
                cmdSelect.HeaderText = "Choose";
                cmdSelect.ShowSelectButton = true;
                cmdSelect.Visible = true;
                gvUsers.Columns.Add(cmdSelect);
            }

            gvUsers.AllowPaging = true;
            gvUsers.PageSize = 4;
            gvUsers.EnableViewState = true;
            gvUsers.DataBind();

            ddlSearchUser.SelectedIndexChanged += DdlSearchUser_SelectedIndexChanged; // subscribe to DropDown Box Changes (Filter Type Options: by UID, Firstname, Lastname)
            btnSearchUser.Click += btnSearchUser_Click;// subscribe to Search button click Changes
            gvUsers.SelectedIndexChanged += GvUsers_SelectedIndexChanged; //subscribe to Change in selected User in GridView 
            gvUsers.PageIndexChanging += new GridViewPageEventHandler(GvUsers_PageIndexChanging); //subscribe to page changes to change page

        }

        public int SearchTypeSet { set; get; } // field to store the selected filter type

        private void DdlSearchUser_SelectedIndexChanged(object sender, EventArgs e)
        {    
            DropDownList ddlist = sender as DropDownList;
            int ddlist_index = ddlist.SelectedIndex;
            SearchTypeSet = ddlist_index;
            // Filter Options Index: 1 = AD | 2 = First Name | 3 = Last Name
        }

        //Below: Drill Down of User --> Shows Access Permission for Selected User
        protected void WebShowPermissions(string aduid)
        {
            UserAppPermission user_app_permission_class = new UserAppPermission();
            gvAppsPermission.DataSource = user_app_permission_class.GetUserAppPermission(aduid);
            gvAppsPermission.AutoGenerateColumns = true;
            gvAppsPermission.DataBind();
        }

        //Below: When User is selected, runs WebShowPermissions method on User
        private void GvUsers_SelectedIndexChanged(object sender, EventArgs e)
        {
            GridView gv = sender as GridView;
            string aduid = gv.SelectedDataKey.Value.ToString();
            WebShowPermissions(aduid);
        }

        //Below: Paging method
        private void GvUsers_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            if (sender != null)
            {
                GridView gvUsers = sender as GridView;
                gvUsers.PageIndex = e.NewPageIndex;

                gvUsers.DataBind();  
            }
        }

        //Below: Method to fill listbox with Filter Options 
        protected void FillLstbxSearchType()
        {
            // Listbox: SearchType
            List<string> searchType = new List<string>();
            string[] stringSearchType = { "Active Directory UserID", "First Name", "Last Name" };
            searchType.AddRange(stringSearchType);
            foreach (var i in searchType)
            {
                ddlSearchUser.Items.Add(i);
            };
        }

        public static List<UserMembers> umem; //static List to store the list of users to be displayed in Gridview

        //Below: button to take Filter type and Search string as parameters for retrieving list from DB
        protected void btnSearchUser_Click(object sender, EventArgs e)
        {
            string text_string = txtSearchString.Text.ToString();
            //string text_fnameuser = txtSearchUser_fname.Text.ToString();

            UserAccessLayer userAccessLayer = new UserAccessLayer();
            umem = userAccessLayer.getUsers(SearchTypeSet, text_string);
            //WebShowUsers(userAccessLayer.getUsers(SearchTypeSet, text_string));    
        }            
    }
}
...