[mapguide-users] Trying to create an ajax search thingo
Jamo
adam.jamison at portbris.com.au
Tue Apr 28 21:34:15 EDT 2009
Jackie I've created a monster......
something is wrong with the FeatureReader that is produced from the layer
.... i think?
It seems to be retrieveing all features from the featuresource .... the
layer has a filter assigned that grabs only some features from the
featuresource...
If you or anyone is able to have a looky it would be great ! requires
ajaxcontroltoolkit.
I can zip up the project if required and post it here.
Default.aspx
---------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="Searchtool_Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit"
TagPrefix="cc1" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<cc1:TabContainer ID="SearchContainer" runat="server" ActiveTabIndex="0"
>
<cc1:TabPanel runat="server" HeaderText="TabPanel1" ID="TabPanel1"
Visible="False">
</cc1:TabPanel>
</cc1:TabContainer>
</div>
</form>
</body>
</html>
----------
Default.aspx.cs
----------
using System;
using System.Collections.Specialized;
using System.Text;
using System.Globalization;
using OSGeo.MapGuide;
using System.Web;
using System.Data;
using System.Collections;
using System.Web.UI.WebControls;
using System.Web.UI;
using AjaxControlToolkit;
public partial class Searchtool_Default : System.Web.UI.Page
{
//for testing requires input from session
//change these to a local map resource
internal static String mapResLocation =
"Library://Production/PortBris/Maps/PortBris.MapDefinition";
internal static String mapName = "PortBris";
//define all selections for searches here
//every search you generate requires a new
//MGSelection to be defined here.
internal static MgSelectionBase cadFeatures;
internal static MgSelectionBase geoFeatures;
//get selection ready for searching on
protected MgSelectionBase createSelectionMaster(String[] Layers)
{
MapGuideApi.MgInitializeWebTier(Request.ServerVariables["APPL_PHYSICAL_PATH"]
+ "../webconfig.ini");
MgUserInformation userInfo = new MgUserInformation("Anonymous", "");
MgSite site = new MgSite();
//connect to site
site.Open(userInfo);
String sessionId = site.CreateSession();
MgSiteConnection siteConnection = new MgSiteConnection();
//open site connection
siteConnection.Open(userInfo);
MgResourceService ResourceService =
siteConnection.CreateService(MgServiceType.ResourceService) as
MgResourceService;
MgFeatureService FeatureService =
siteConnection.CreateService(MgServiceType.FeatureService) as
MgFeatureService;
MgResourceIdentifier mgResourceID = new
MgResourceIdentifier(mapResLocation);
//MgMapBase map = new MgMapBase();
MgMap map = new MgMap(siteConnection);
map.Create(ResourceService, mgResourceID, mapName);
MgSelectionBase thisSel = new MgSelectionBase(map);
foreach (String layer in Layers)
{
MgLayer cLayer = map.GetLayers().GetItem(layer) as MgLayer;
MgFeatureReader cFeatReader = cLayer.SelectFeatures(null);
thisSel.AddFeatures(cLayer as MgLayerBase, cFeatReader,0);
}
return thisSel;
}
//return an array
protected String[] StringArray(String CommaSeperatedLayers)
{
return CommaSeperatedLayers.Split(",".ToCharArray());
}
//add a DDL search type to the TabContainer
protected DropDownList addSearchDDL(Control controlToAddTo, String
searchDDLId, String labelText)
{
Label cLabel = new Label();
cLabel.Text = labelText + ":";
controlToAddTo.Controls.Add(new LiteralControl("<BR>"));
controlToAddTo.Controls.Add(cLabel);
DropDownList cDDL = new DropDownList();
cDDL.ID = searchDDLId;
controlToAddTo.Controls.Add(cDDL);
controlToAddTo.Controls.Add(new LiteralControl("<BR>"));
controlToAddTo.Controls.Add(new LiteralControl("<BR>"));
ListSearchExtender cSrchExt = new ListSearchExtender();
cSrchExt.TargetControlID = searchDDLId;
cSrchExt.ID = searchDDLId + "SrchExt";
cSrchExt.IsSorted = true;
controlToAddTo.Controls.Add(cSrchExt);
return cDDL;
}
//add a new Tab to the Ajax TabContainer
//each tab is a different search type
protected AjaxControlToolkit.TabPanel
AddTab(AjaxControlToolkit.TabContainer TabCont, String TabID, String Header)
{
AjaxControlToolkit.TabPanel newTab = new AjaxControlToolkit.TabPanel();
newTab.ID = TabID;
newTab.HeaderText = Header;
TabCont.Tabs.Add(newTab);
TabCont.TabIndex = 1;
return newTab;
}
protected Panel addAdvancedSearch(Control controlToAddTo, String
searchName)
{
if (controlToAddTo.FindControl("advSrchPnl" + searchName) == null)
{
Panel advSearchPanel = new Panel();
Panel advSearchPanelToggle = new Panel();
advSearchPanel.ID = "advSrchPnl" + searchName;
advSearchPanelToggle.ID = "advSrchPnlToggle" + searchName;
Label advSearchPanelLbl = new Label();
advSearchPanelLbl.Text = "Advanced Search";
CollapsiblePanelExtender advSearchExt = new
CollapsiblePanelExtender();
advSearchExt.TargetControlID = advSearchPanel.ID;
advSearchExt.CollapseControlID = advSearchPanelToggle.ID;
advSearchExt.ExpandControlID = advSearchPanelToggle.ID;
advSearchExt.Collapsed = true;
advSearchPanelToggle.Controls.Add(advSearchPanelLbl);
controlToAddTo.Controls.Add(advSearchPanelToggle);
controlToAddTo.Controls.Add(advSearchPanel);
controlToAddTo.Controls.Add(advSearchExt);
return advSearchPanel;
}
else
{
return controlToAddTo.FindControl("advSrchPnl" + searchName) as Panel;
}
}
protected DataTable addToDT(DataTable DT, MgFeatureReader featReaderToAdd,
String propToAdd)
{
while (featReaderToAdd.ReadNext())
{
DataRow DR = DT.NewRow();
if (featReaderToAdd.IsNull(propToAdd) == false)
{
DR[propToAdd] = featReaderToAdd.GetString(propToAdd);
//Response.Write(propToAdd + " = " +
featReaderToAdd.GetString(propToAdd));
DT.Rows.Add(DR);
}
}
featReaderToAdd.Close();
//DataTable DT2 = DT.DefaultView.ToTable(true, propToAdd);
//DataView DV = new DataView(DT2);
//DV.Sort = propToAdd;
//DDLToAddTo.DataTextField = propToAdd;
//DDLToAddTo.DataValueField = propToAdd;
//DDLToAddTo.DataSource = DV;
//DDLToAddTo.DataBind();
return DT;
}
protected void createSearch(MgSelectionBase srchOnThisSel, String
srchName, String[] basicProps, String[] advProps, Control controlToAddTo)
{
foreach (MgLayerBase cLayer in srchOnThisSel.GetLayers())
{
MgFeatureReader featureReader = cLayer.SelectFeatures(null);
MgClassDefinition cClassDef = featureReader.GetClassDefinition();
//write out each Properties search Drop down List
foreach (string basicProp in basicProps)
{
DataTable DT;
//something here is grabbing all features from featuresource
//i think ? it should only grab those in cLayer
MgFeatureReader featReaderForDT = cLayer.SelectFeatures(null);
if (controlToAddTo.FindControl(basicProp) == null)
{
//ToDo: add Property type selector...
MgProperty cProp =
featureReader.GetClassDefinition().GetProperties().GetItem(basicProp);
DropDownList cDDL = addSearchDDL(controlToAddTo, basicProp,
cProp.Name);
DT = new DataTable();
DT.Columns.Add(cProp.Name);
DT = addToDT(DT,featReaderForDT,cProp.Name);
DropDownList DDLToAddTo = controlToAddTo.FindControl(basicProp) as
DropDownList;
DataTable DT2 = DT.DefaultView.ToTable(true, basicProp);
DataView DV = new DataView(DT2);
DV.Sort = basicProp;
DDLToAddTo.DataTextField = basicProp;
DDLToAddTo.DataValueField = basicProp;
DDLToAddTo.DataSource = DV;
DDLToAddTo.DataBind();
}
else
{
//ToDo: add Property type selector...
DropDownList cDDL = controlToAddTo.FindControl(basicProp) as
DropDownList;
Response.Write(cDDL.DataSource.GetType().ToString());
DataView DV1 = cDDL.DataSource as DataView;
DT = DV1.ToTable();
DT = addToDT(DT, featReaderForDT, basicProp);
DataTable DT2 = DT.DefaultView.ToTable(true, basicProp);
DataView DV = new DataView(DT2);
DV.Sort = basicProp;
cDDL.DataTextField = basicProp;
cDDL.DataValueField = basicProp;
cDDL.DataSource = DV;
cDDL.DataBind();
}
}
//write advanced search options
Panel cSearchPanel = addAdvancedSearch(controlToAddTo, srchName);
//write other properties as advanced search options
//Search through defined properties.
foreach (string advProp in advProps)
{
if (cSearchPanel.FindControl(advProp) == null)
{
//ToDo: add Property type selector...
MgProperty cProp =
featureReader.GetClassDefinition().GetProperties().GetItem(advProp);
DropDownList cDDL = addSearchDDL(cSearchPanel, advProp,
cProp.Name);
}
}
}
}
//ToDo: Add more searches
protected void Page_Load(object sender, EventArgs e)
{
MapGuideApi.MgInitializeWebTier(Request.ServerVariables["APPL_PHYSICAL_PATH"]
+ "../webconfig.ini");
MgUserInformation userInfo = new MgUserInformation("Anonymous", "");
MgSite site = new MgSite();
//connect to site
site.Open(userInfo);
String sessionId = site.CreateSession();
MgSiteConnection siteConnection = new MgSiteConnection();
//open site connection
siteConnection.Open(userInfo);
MgResourceService ResourceService =
siteConnection.CreateService(MgServiceType.ResourceService) as
MgResourceService;
MgFeatureService FeatureService =
siteConnection.CreateService(MgServiceType.FeatureService) as
MgFeatureService;
MgResourceIdentifier mgResourceID = new
MgResourceIdentifier(mapResLocation);
MgMap map = new MgMap(siteConnection);
map.Create(ResourceService, mgResourceID, mapName);
//customise these to produce a new tab for your search
//add tab for cadastre search
TabPanel cadSearch = AddTab(SearchContainer, "cadSearch", "Cadastre");
cadFeatures = createSelectionMaster(StringArray("cadFREE,cadPPLE"));
String[] cadBasicProps = StringArray("PRI_LOT,PRI_PLAN");
String[] cadAdvProps =
StringArray("LAND_TYPE,UNIQUE_ID,WET_DRY,AREA,COUNTY,PARISH,STRATEGIC,FILE_NO,STATUS,TENURE_TYP");
createSearch(cadFeatures, "cadastre", cadBasicProps, cadAdvProps,
cadSearch);
//add tab for geotechnical search
TabPanel geoSearch = AddTab(SearchContainer, "geotechBoreHole",
"Borehole");
geoFeatures = createSelectionMaster(StringArray("geotechBorehole"));
String[] geoBasicProps = StringArray("date,author");
String[] geoAdvProps = StringArray("ID,plan");
createSearch(geoFeatures, "cadastre", geoBasicProps, geoAdvProps,
geoSearch);
}
}
--
View this message in context: http://n2.nabble.com/Trying-to-create-an-ajax-search-thingo-tp2729762p2738096.html
Sent from the MapGuide Users mailing list archive at Nabble.com.
More information about the mapguide-users
mailing list