我在 C#和 .NET 上还很陌生,我遇到以下问题。
在我的代码中,我有这样的东西:
Table table = new Table();
lstLabelType.SelectedIndexChanged += new System.EventHandler(SelectDocumentTypeChanged);
将事件处理程序附加到视图中的下拉元素。
因此,当用户将选定的值更改为此下拉菜单时,将执行 SelectDocumentTypeChanged()方法,该方法是
private void SelectDocumentTypeChanged(object sender, EventArgs e)
{
Debug.WriteLine("SelectDocumentTypeChanged() STARTED");
SPWeb contextWeb = SPContext.Current.Web;
DropDownList listaTipiDocumenti = (DropDownList)sender;
tipoDocumentoSelezionato = listaTipiDocumenti.SelectedValue;
this.renderizzaEtichetteFacoltative(tipoDocumentoSelezionato, table);
string url = contextWeb.Url;
string link = url + "/ARXEIA WEBPART/Stampa Etichetta.aspx?IsDlg=1&postazione=" + macchina + "&tipoDoc=" + tipoDocumentoSelezionato;
SPUtility.Redirect(link, SPRedirectFlags.Default, Context);
}
现在我有问题。我必须将在代码中创建的 Table table 对象传递给此事件处理程序方法,因为必须使用此方法。
如何正确实现此行为?当用户更改我的下拉菜单中的值时,如何自动调用该 Table table 对象到 SelectDocumentTypeChanged()方法?
答案 0 :(得分:6)
尝试这样编写代码:
Table table = new Table();
lstLabelType.SelectedIndexChanged += (sender, e) =>
{
Debug.WriteLine("SelectDocumentTypeChanged() STARTED");
SPWeb contextWeb = SPContext.Current.Web;
DropDownList listaTipiDocumenti = (DropDownList)sender;
tipoDocumentoSelezionato = listaTipiDocumenti.SelectedValue;
this.renderizzaEtichetteFacoltative(tipoDocumentoSelezionato, table);
string url = contextWeb.Url;
string link = url + "/ARXEIA WEBPART/Stampa Etichetta.aspx?IsDlg=1&postazione=" + macchina + "&tipoDoc=" + tipoDocumentoSelezionato;
SPUtility.Redirect(link, SPRedirectFlags.Default, Context);
};
现在,您可以直接在事件处理程序中直接使用table
。
您现在甚至可以忽略sender
并执行以下操作:
lstLabelType.SelectedIndexChanged += (s, e) =>
{
Debug.WriteLine("SelectDocumentTypeChanged() STARTED");
SPWeb contextWeb = SPContext.Current.Web;
tipoDocumentoSelezionato = lstLabelType.SelectedValue;
this.renderizzaEtichetteFacoltative(tipoDocumentoSelezionato, table);
string url = contextWeb.Url;
string link = url + "/ARXEIA WEBPART/Stampa Etichetta.aspx?IsDlg=1&postazione=" + macchina + "&tipoDoc=" + tipoDocumentoSelezionato;
SPUtility.Redirect(link, SPRedirectFlags.Default, Context);
};
如果要保留其他方法,可以执行以下操作:
Table table = new Table();
lstLabelType.SelectedIndexChanged += (o, e) => SelectDocumentTypeChanged(lstLabelType, table);
private void SelectDocumentTypeChanged(DropDownList lstLabelType, Table table)
{
Debug.WriteLine("SelectDocumentTypeChanged() STARTED");
SPWeb contextWeb = SPContext.Current.Web;
tipoDocumentoSelezionato = lstLabelType.SelectedValue;
this.renderizzaEtichetteFacoltative(tipoDocumentoSelezionato, table);
string url = contextWeb.Url;
string link = url + "/ARXEIA WEBPART/Stampa Etichetta.aspx?IsDlg=1&postazione=" + macchina + "&tipoDoc=" + tipoDocumentoSelezionato;
SPUtility.Redirect(link, SPRedirectFlags.Default, Context);
}