📄 printtask_csharp.cs
字号:
return base.GetCallbackResult();
}
#endregion
#region ITask overrides: Input, ExecuteTask, GetGISResourceItemDependencies
public override object Input
{
get
{
return base.Input;
}
set
{
base.Input = value;
if (value != null)
{
EnsureChildControls();
NameValueCollection keyValColl = value as NameValueCollection;
#region Parse inputs into controls
// Need to do this in case full postback occurs(?)
if (!String.IsNullOrEmpty(keyValColl["title"]))
{
//txtTitle.Text = Encoding.GetEncoding("gb2312").GetString(Convert.FromBase64String(keyValColl["title"]));
txtTitle.Text = keyValColl["title"];
}
ckbPrintMap.Checked = !String.IsNullOrEmpty(keyValColl["mapId"]);
this.Map = keyValColl["mapId"];
ddlMapWidth.SelectedValue = keyValColl["width"];
ddlMapResolution.SelectedValue = keyValColl["resolution"];
txtScale.Text = keyValColl["scale"];
// get a current list of task results into the task checkboxlist
UpdateResultsListInPrintTask();
// select the task results, if any chosen
string selResults = keyValColl["printResults"];
if (!String.IsNullOrEmpty(selResults))
{
string[] selResultIndx = selResults.Split(new char[] { ',' });
for (int i = 0; i < selResultIndx.Length; i++)
cblResults.Items[int.Parse(selResultIndx[i])].Selected = true;
}
#endregion
}
}
}
public override void ExecuteTask()
{
Results = null;
if (Input == null)
return;
NameValueCollection keyValColl = (NameValueCollection)Input;
#region Add map to print page
Map mapCtrl = (Map)Utilities.FindControlRecursive(Page, this.Map);
// Page.FindControl(this.Map);
PagePrinter pgPrinter = new PagePrinter(mapCtrl);
// title may have had &'s replaced at client--restore now
pgPrinter.PrintTitle = txtTitle.Text.Replace("##amp##", "&");
pgPrinter.PrintResolution = int.Parse(this.ddlMapResolution.SelectedValue);
if (this.ddlMapWidth.SelectedValue != "Default")
pgPrinter.PrintWidth = int.Parse(this.ddlMapWidth.SelectedValue);
int scale;
bool scaleParse = int.TryParse(txtScale.Text, out scale);
if (scaleParse)
pgPrinter.PrintScale = scale;
// add scalebar, if present on page
if (IncludeScaleBar)
{
List<Control> ctls = Utilities.FindControls(typeof(ScaleBar), Page.Controls);
if (ctls.Count > 0)
{
ScaleBar mapScalebar = null;
foreach (ScaleBar sb in ctls)
{
if (sb.Map == this.Map)
{
mapScalebar = sb;
break;
}
}
pgPrinter.ScaleBarControl = mapScalebar;
}
}
#endregion
#region Add task results to print page
pgPrinter.ShowIdField = this.ShowIdField;
pgPrinter.NodesToPrint = GetNodesToPrint();
string printContent = Page.Server.HtmlEncode(pgPrinter.CreatePrintPageContent());
#endregion
#region Set up callback results
// add output to callbackresults
Object[] oa = new Object[1];
string printFunctionCall =
String.Format("PrintTaskDisplayPage(\"{0}\")", printContent);
oa[0] = printFunctionCall;
CallbackResult cbResults = new CallbackResult(null, "javascript", oa);
this.CallbackResults.Add(cbResults);
Results = new SimpleTaskResult(
String.Concat(this.ID, " print page"), String.Empty);
#endregion
}
public override List<GISResourceItemDependency> GetGISResourceItemDependencies()
{
return new List<GISResourceItemDependency>();
}
#endregion
#region Private methods
// Gets a list of the task types supported in the print task for printing task results
private string[] SupportedTaskTypes
{
get
{
string[] taskTypes = new string[]
{
typeof(ESRI.ArcGIS.ADF.Tasks.QueryAttributesTask).Name,
typeof(ESRI.ArcGIS.ADF.Tasks.SearchAttributesTask).Name,
// use hard-coded strings to avoid reference to other custom task
"GraphicalSelectionTask",
"ImsBufferTask"
};
return taskTypes;
}
}
// handle event when task result is removed
private void TaskResultContextMenu_ItemClicked(object sender, ContextMenuItemEventArgs args)
{
if (args.Item.Text == "Remove")
{
// Update the list of task results in the task UI
// - since this is a callback by a different control, need to pass the
// taskresults HTML to display in browser
CallbackResult cbResultTaskList = RefreshTaskResultsList();
((ContextMenu)sender).CallbackResults.Add(cbResultTaskList);
}
}
// Refreshes task results list in Print dialog, via callback
private CallbackResult RefreshTaskResultsList()
{
// Update the list of IMS task results
bool resultsItemsFound = UpdateResultsListInPrintTask();
// Need to add to callback results to refresh results-list content
CallbackResult cbResultTaskList = Utilities.RefreshControlHtml(cblResults);
return cbResultTaskList;
}
// Compares current task results items to list in print task, and updates the
// list if any changes have occurred
private bool UpdateResultsListInPrintTask()
{
bool resultsFound = false;
ListItem[] taskResItems =
Utilities.GetTaskResultList(this.TaskResultsContainers, Page);
if (Utilities.TaskResultItemsChanged(taskResItems, cblResults))
{
// get HTML content from taskResItems and replace cblResults content in page via callback
cblResults.Items.Clear();
if (taskResItems.Length > 0)
{
cblResults.Items.AddRange(taskResItems);
resultsFound = true;
}
else
{
ListItem liNone = new ListItem("(不可用)", "0");
liNone.Enabled = false;
liNone.Selected = false;
cblResults.Items.Add(liNone);
}
}
return resultsFound;
}
private TreeViewPlusNodeCollection GetNodesToPrint()
{
TreeViewPlusNodeCollection nodeColl = new TreeViewPlusNodeCollection();
List<TaskResults> trColl = Utilities.GetTaskResultsControls(
this.TaskResultsContainers, Page);
bool foundNode;
foreach (ListItem item in cblResults.Items)
{
foundNode = false;
// only print items checked in task results list in print UI
if (item.Selected)
{
string taskJobId = item.Value;
// find task results job item in TaskResults
foreach (TaskResults tr in trColl)
{
foreach (TreeViewPlusNode rNode in tr.Nodes)
{
if (rNode is TaskResultNode)
{
TaskResultNode trNode = (TaskResultNode)rNode;
if (trNode.TaskJobID == taskJobId)
{
// found the task job: add to nodes to print
nodeColl.Add(trNode);
foundNode = true; // skip rest of nodes
break;
}
}
if (foundNode)
break;
}
}
}
}
if (nodeColl.Count > 0)
return nodeColl;
else
return null;
}
#endregion
#region OnInit method - handles print image request
protected override void OnInit(EventArgs e)
{
// Handle request for map print image
if (Page.Request.QueryString["getMap"] != null)
{
// retrieve bitmap from session
string mapKey = (string)Page.Request.QueryString["getMap"];
System.Drawing.Bitmap mapImage = (System.Drawing.Bitmap)
Page.Session[mapKey];
// ?use StateManager - works but Session may be more appropriate
//this.StateManager.Get(mapKey);
Page.Response.Clear();
Page.Response.ContentType = "Image/Png";
if (mapImage != null)
{
using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
{
mapImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
stream.WriteTo(Page.Response.OutputStream);
}
// (Can't dispose of image in case re-requested, e.g., for print preview)
//mapImage.Dispose();
}
// Cut off remaining page execution
Page.Response.End();
}
base.OnInit(e);
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -