/// <summary>
/// 弹出对话框
/// </summary>
/// <param name="parentctr"></param>
/// <param name="ControlPowerList"></param>
public void FindControlInControls(Control parentctr, DataTable ControlPowerList)
{
foreach (Control ctr in parentctr.Controls)
{
if (CURRENTPERSON != "programmer" && System.Configuration.ConfigurationSettings.AppSettings["IsPower"] == "true")
{
var querylist = ControlPowerList.AsEnumerable().Where(info => info["CONTROLER_NAME"].ToString() == ctr.ID).Where(info => info["POWER_NAME"].ToString() == "控件不可见");
if (querylist.Count() > 0)
{
ctr.Visible = false;
}
}
switch (ctr.GetType().ToString())
{
//为Button添加鼠标焦点变化事件
case "System.Web.UI.WebControls.Button":
(ctr as Button).Attributes.Add("onmouseover", "this.className='Boutton_LightBlue1'");
(ctr as Button).Attributes.Add("onmouseout", "this.className='Boutton_LightBlue'");
break; }
FindControlInControls(ctr, ControlPowerList);
}
}
之前没有接触过LINQ这段代码没怎么看懂,重点是var querylist = ControlPowerList.AsEnumerable().Where(info => info["CONTROLER_NAME"].ToString() == ctr.ID).Where(info => info["POWER_NAME"].ToString() == "控件不可见");没看懂,info,=>,ControlPowerList.AsEnumerable().Where这些怎么理解?
2. info就是个变量,同上查查Lambda
3. AsEnumerable() 将DataTable转成可以进行Linq查询的对象上面的语句也可以写成:类似sql,能明白吧。info就是一条DataRowvar queryList = from info in ControlPowerList.AsEnumerable()
where info["CONTROLER_NAME"].ToString() == ctr.ID
&& info["POWER_NAME"].ToString() == "控件不可见"
select info;
info:为一个变量(自定义变量)
=>:lambda标识
ControlPowerList.AsEnumerable().Where
ControlPowerList:你传入的DataTable,AsEnumerable():把DataTable转换为AsEnumerable().
.Where是查询的多个where里面的为条件.
建议可以看看lambda表达式.看了在来看你代码一目了然。