ディレクトリを検索してすべてのユーザーコントロールをフォームにロードし、「GetResult()」メソッドを使用してフォームから回答を取得するアプリケーションを作成しました。私はまだOOPを十分に活用する方法を学んでいるので、このOOPスタイルを実行しませんでした。今度は、オブジェクトを操作している場合にはるかに簡単になる次の部分に進むことができるように、OOPを使用して設計することに戻ります。今、「RequestForm」クラスを作成しました。RequestForm.ResultをUCに到達させ、GetResults()メソッドを呼び出したいと思います。知識が不足しているため、誰かが私を正しい方向に向けることができるかもしれませんが、私はこれを行うのに苦労しています。
FormUserControl-抽象クラス
namespace AccessRequest
{
public abstract class FormUserControl : UserControl
{
public abstract string Name();
public abstract string GetResults();
public abstract string EmailUsers();
}
}
RequestForm-オブジェクトクラス
namespace AccessRequest
{
public class RequestForm
{
public string Name { get; set; }
public string ControlID { get; set; }
public string StepName { get; set; }
public string FilePath { get; set; }
public string Results {
get
{
//How would I pull my usercontrol results with Control.GetReults() from within this area?
//I have since then turned this into a method. How would I get it to access my UserControl loaded on the asp page to grab the results?
}
set;
}
public string Emails { get; set; }
public int Position { get; set; }
public bool Visible { get; set; }
public RequestForm()
{
}
/// <summary>
/// FormResults gathers all needed information about the forms
/// </summary>
/// <param name="formName">Name of the Form</param>
/// <param name="formControlID">ID of the User Control </param>
/// <param name="wizardStepID">ID of the Wizard Step</param>
/// <param name="formFilePath">File path of the physical form</param>
/// <param name="formResults">Results from the form</param>
/// <param name="formEmails">Other emails to include</param>
public RequestForm(string formName, string formControlId, string wizardStepID, int wizardStepPosition, string formFilePath, string formResults, string formEmails)
{
this.Name = formName;
this.ControlID = formControlId;
this.StepName = wizardStepID;
this.Position = wizardStepPosition;
this.FilePath = formFilePath;
this.Results = formResults;
this.Emails = formEmails;
this.Visible = false;
}
public void SaveList(List<RequestForm> formList)
{
// HttpContext.Current.Session["FormList"] = formList;
}
}
}
これが、すべてのフォームをロードするためにOnInitに配置したLoadForms()メソッドです。RequestFormピースを完全に実装していませんが、これは、オブジェクトリストの作成に使用する必要があると考えています。
private void LoadForms()
{
string dotColor = "Black";
string formColor = "#808080";
int loc = 3;
foreach (ListItem item in chklApplications.Items)
{
string formPath = (string)item.Value;
WizardStepBase newStep = new WizardStep();
newStep.ID = "wzStep" + item.Text;
newStep.Title = String.Format("<font color='{0}'> ¤</font> <font color='{1}'>{2} Request</font>", dotColor, formColor, item.Text);
var form = LoadControl(formPath);
form.ID = "uc" + item.Text;
newStep.Controls.Add(form);
wzAccessRequest.WizardSteps.AddAt(loc, newStep);
requestForm.Add(new RequestForm(
item.Text, //Form name
form.ID.ToString(), //User Control ID
newStep.ID.ToString(), //Wizardstep ID
loc, //Wizardstep Position
item.Value.ToString(), //File Path
null, //Form Results
null //Form Emails
));
loc++;
}
}
ここで、ウィザードコントロールのサイドメニューに表示するかどうかを設定します。ところで、誰かがこれのためのテーブルタグを作成することさえ防ぐことができる方法を知っていますか?現在、フォームを挿入するスペースが大きくなっています。
protected void SideBarList_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if (!ShowWizardStep(e.Item.DataItem))
{
e.Item.CssClass = "Hidden";
}
}
}
アドバイスありがとうございます!! :D