2011-02-09 257 views
1

我想将另一个值传递给方法LeCmb_Statut_SelectedIndexChanged,我该如何继续?C#委托事件处理程序SelectedIndexChanged

我的代码:

SqlDataReader reader = comm.ExecuteReader(); 
while (reader.Read()) 
{ 
    ... 
    DropDownList LeCmb_Statut = new DropDownList(); 
    string tempLabel = reader["LIBELLE"].ToString(); 
    string templabelVeh = reader["LIBVEH"].ToString() 
} 

如何传递这些临时变量到LeCmb_Statut_SelectedIndexChanged

LeCmb_Statut.SelectedIndexChanged += new EventHandler(LeCmb_Statut_SelectedIndexChanged); 
+0

@ user609511:描述更多你有什么和你想要达到什么。 – abatishchev 2011-02-09 10:18:52

+0

当前您正在为每个记录创建一个新的DropDownList。将项目添加到预先存在的DropDownList是否更有意义? – 2011-02-09 10:21:54

回答

2

您可以使用dropdownlist的Tag属性。 第一,创建一个简单的DTO:

public class LabelDTO 
{ 
    public string Label {get;set;} 
    public string LabelVeh {get;set;} 
} 

则:

while (reader.Read()) 
{ 
    ... 
    DropDownList LeCmb_Statut = new DropDownList(); 
    LabelDTO lbl= new LabelDTO(){Label=reader["LIBELLE"].ToString(), LabelVeh=reader["LIBVEH"].ToString()}; 

    LeCmb_Statut.Tag=lbl; 
} 

那么LeCmb_Statut_SelectedIndexChanged内:

LeCmb_Statut_SelectedIndexChanged (object sender, System.EventArgs e) 
{ 
    LabelDTO labelDTO= ((DropDownList)sender).Tag as LabelDTO ; 
    if (labelDTO!=null) 
    { 
     ///here you can use the label and labelVeh properties. 

    } 
} 
2

您可以使用匿名方法来捕捉它们:

string tempLabel = reader["LIBELLE"].ToString(); 
string templabelVeh = reader["LIBVEH"].ToString() 
LeCmb_Statut.SelectedIndexChanged += delegate { 
    // do something fun with tempLabel and templabelVeh 
}; 

这可能是行内的小块,或更长的代码 - 只是传递给方法:

string tempLabel = reader["LIBELLE"].ToString(); 
string templabelVeh = reader["LIBVEH"].ToString() 
LeCmb_Statut.SelectedIndexChanged += delegate { 
    DoSomethingFun(tempLabel,templabelVeh); 
}; 

,或者如果您需要发送/ ARGS:

string tempLabel = reader["LIBELLE"].ToString(); 
string templabelVeh = reader["LIBVEH"].ToString() 
LeCmb_Statut.SelectedIndexChanged += delegate(object sender, EventArgs args) { 
    DoSomethingFun(sender,args,tempLabel,templabelVeh); 
}; 

或C#3.0:

string tempLabel = reader["LIBELLE"].ToString(); 
string templabelVeh = reader["LIBVEH"].ToString() 
LeCmb_Statut.SelectedIndexChanged += (sender, args) => 
    DoSomethingFun(sender,args,tempLabel,templabelVeh); 
相关问题