protected void btnSearchVentures_Click(object sender, EventArgs e) { SelectedSkillsList = SelectSkills(); Debug.WriteLine("Entering btnSearchVentures"); List <GvSearchObj> list = Session["SelectedSkillsList"] as List <GvSearchObj>; lblSearchError.Text = " "; List <ExpertSearchObj> expertVentureNameSearch = new List <ExpertSearchObj>(); //all ventures searched by their names List <ExpertSearchObj> expertVentureDescSearch = new List <ExpertSearchObj>(); //all ventures searched by their descriptions List <ExpertSearchObj> expertSkillSearch = new List <ExpertSearchObj>(); //skills List <ExpertSearchObj> distinctVentureIds = new List <ExpertSearchObj>(); //distinct ventures with all their skills DataSet dsExpertSkillSearchResults = new DataSet("ExpertSkillSearchResults"); lblSearchError.Text = " "; int x = 0; string txtTemp = txtPrefSearchVentureDesc.Text.Replace(" ", String.Empty); //clear both repeaters rpVentureSearchResults.DataSource = null; rpExpertSearchResults.DataSource = null; rpVentureSearchResults.DataBind(); rpExpertSearchResults.DataBind(); if (list == null && string.IsNullOrWhiteSpace(txtPrefSearchVentureDesc.Text)) {//no, no lblSearchError.Text = "You must select some skills, enter a venture name, and/or enter a venture description to search for ventures."; } else if (!string.IsNullOrWhiteSpace(txtTemp) && Regex.IsMatch(txtTemp, "^[a-zA-Z]+$") == false) { lblSearchError.Text = "Illegal characters used. Please only use text in Search Ventures by description."; } else if (list != null && string.IsNullOrWhiteSpace(txtPrefSearchVentureDesc.Text)) {//yes, no //search only by skills foreach (GvSearchObj gvObj in SelectedSkillsList) //get data from search parameter selectedSkills { DataSet results = DbMethods.SearchVentures(gvObj.SkillName); //get search result of all experts that match the searched skillName if (results.Tables.Count == 0) { break; } else { DataTable resultTable = results.Tables[0].Copy(); resultTable.TableName = "Table " + x; resultTable.AcceptChanges(); dsExpertSkillSearchResults.Tables.Add(resultTable);//add search results of one skill to DataSet as DataTable x++; } }//END of the Search Portion of the CLick Event //put that data into a list; Add all tables into one table for (int z = 0; z < dsExpertSkillSearchResults.Tables.Count; z++) { dsExpertSkillSearchResults.Tables[0].Merge(dsExpertSkillSearchResults.Tables[z]); } //add to Mega List from first table in ds, b/c that has all merged tables expertSkillSearch = Data.CreateListFromTable <ExpertSearchObj>(dsExpertSkillSearchResults.Tables[0]); distinctVentureIds = getVentureSkillDuplicatesAndData(expertSkillSearch); //The Comparison Portion of the CLick Event using (var gvSO = SelectedSkillsList.GetEnumerator()) using (var dtuid = distinctVentureIds.GetEnumerator()) {//start search while (dtuid.MoveNext()) { var dtuidItem = dtuid.Current; while (gvSO.MoveNext()) { var gvSoItem = gvSO.Current; foreach (var k in dtuidItem.AllVentureSkills) { if (k.ToString().Equals(gvSoItem.SkillName, StringComparison.OrdinalIgnoreCase)) { dtuidItem.VentureRank = dtuidItem.VentureRank + 1; } } } } }//end search }//end else if else if (list == null && !string.IsNullOrWhiteSpace(txtPrefSearchVentureDesc.Text)) {//no, yes if (!Regex.IsMatch(txtPrefSearchVentureDesc.Text, "^[a-zA-Z]", RegexOptions.IgnorePatternWhitespace)) { lblSearchError.Text = "invalid input: Please enter only letters when searching by Venture Description."; } else { DataTable searchByVentureDescriptionResults = DbMethods.SearchVenturesBasedOnDesc(txtPrefSearchVentureDesc.Text).Tables[0]; if (searchByVentureDescriptionResults.Rows.Count == 0) { lblSearchError.Text = "Your search parameters didn't produce any results."; } else { distinctVentureIds = Data.CreateListFromTable <ExpertSearchObj>(searchByVentureDescriptionResults); foreach (ExpertSearchObj ex in distinctVentureIds) { if (ex.Picture != null) { ex.image = d.ConvertToImage((byte[])ex.Picture);//returns string url } else {//in case expert's profile pic is null byte[] imageBytes; MemoryStream ms = new MemoryStream(); System.Drawing.Image img = System.Drawing.Image.FromFile("Images/TUOwls_logo.png"); img.Save(ms, System.Drawing.Imaging.ImageFormat.Png); imageBytes = ms.ToArray(); ex.image = d.ConvertToImage(imageBytes); } } //The Comparison Portion of the CLick Event using (var dtuid = distinctVentureIds.GetEnumerator()) {//start search while (dtuid.MoveNext()) { var dtuidItem = dtuid.Current; if (dtuidItem.VentureDesc.Contains(txtPrefSearchVentureDesc.Text)) { dtuidItem.VentureRank = dtuidItem.VentureRank + 1; } } }//end search } } } else if (list != null && !string.IsNullOrWhiteSpace(txtPrefSearchVentureDesc.Text)) { //yes, yes foreach (GvSearchObj gvObj in SelectedSkillsList) //get data from search parameter selectedSkills { DataSet results = DbMethods.SearchVentures(gvObj.SkillName); //get search result of all experts that match the searched skillName if (results.Tables.Count == 0) { break; } else { DataTable resultTable = results.Tables[0].Copy(); resultTable.TableName = "Table " + x; resultTable.AcceptChanges(); dsExpertSkillSearchResults.Tables.Add(resultTable);//add search results of one skill to DataSet as DataTable x++; } }//END of the Search Portion of the CLick Event //put that data into a list; Add all tables into one table for (int z = 0; z < dsExpertSkillSearchResults.Tables.Count; z++) { dsExpertSkillSearchResults.Tables[0].Merge(dsExpertSkillSearchResults.Tables[z]); } //add to Mega List from first table in ds, b/c that has all merged tables expertSkillSearch = Data.CreateListFromTable <ExpertSearchObj>(dsExpertSkillSearchResults.Tables[0]); distinctVentureIds = getVentureSkillDuplicatesAndData(expertSkillSearch); //The Comparison Portion of the CLick Event using (var gvSO = SelectedSkillsList.GetEnumerator()) using (var dtuid = distinctVentureIds.GetEnumerator()) {//start search while (dtuid.MoveNext()) { var dtuidItem = dtuid.Current; while (gvSO.MoveNext()) { var gvSoItem = gvSO.Current; foreach (var k in dtuidItem.AllVentureSkills) { if (k.ToString().Equals(gvSoItem.SkillName, StringComparison.OrdinalIgnoreCase)) { dtuidItem.VentureRank = dtuidItem.VentureRank + 1; } } } } }//end search } if (distinctVentureIds.Count != 0) { List <ExpertSearchObj> SortedList = distinctVentureIds.OrderBy(o => o.VentureRank).ToList(); this.rpVentureSearchResults.DataSource = SortedList; this.rpVentureSearchResults.DataBind(); } ClearControls(); txtPrefSearchVentureDesc.Text = string.Empty; } //end Expert Searches Ventures click event