<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      repeater 模擬器 in winform

      2012-02-08 17:27  【當(dāng)耐特】  閱讀(3006)  評(píng)論(6)    收藏  舉報(bào)

      需求

      有一個(gè)這樣的需求,根據(jù)給定的數(shù)據(jù)源和html模板生成html,強(qiáng)大的All in one code中的代碼不能滿足需求,所以就有了RepeaterSimulate.

      其中涉及:反射、泛型、正則表達(dá)式等基礎(chǔ)知識(shí)。

       

      RepeaterSimulate使用

                  RepeaterSimulate r = new RepeaterSimulate();
      
                  r.ItemTemplate = "<div>#Name#<div><div>#Age#<div>";
      
                  List<TestModel> tm = new List<TestModel>() { 
      
                     new TestModel(){Name="zhangsan",Age=11},
      
                     new TestModel(){Name="lisi",Age=12},
      
                     new TestModel(){Name="wangwu",Age=13},
      
                     new TestModel(){Name="sunliu",Age=31}
      
                  };
      
                  string html = r.GenerateHTML<TestModel>(tm);
      
                  Console.WriteLine(html);
      
                  Console.Read();

      效果如圖:

      image

       

      RepeaterSimulate實(shí)現(xiàn)

      模擬器中的GenerateHTML方法:

              public string GenerateHTML<T>(object obj)
      
              {
      
                  StringBuilder sb = new StringBuilder();
      
                  IEnumerable<T> enumerable = obj as IEnumerable<T>;
      
                  MemberInfo[] myMemberInfo;
      
                  // Get the type of 'MyClass'.
      
                  Type myType = typeof(T);
      
                  // Get the information related to all public member's of 'MyClass'. 
      
                  myMemberInfo = myType.GetMembers();
      
                  string regexText = "#\\w{1,}#";
      
                  Match mt = Regex.Match(this.ItemTemplate, regexText);
      
                  List<string> results = RegularHelper.GetResult(mt);
      
                  foreach (var item in enumerable)
      
                  {
      
                      string tempStr = this.ItemTemplate;
      
                      for (int i = 0; i < myMemberInfo.Length; i++)
      
                      {
      
                         
      
                          if (myMemberInfo[i].MemberType.ToString() == "Property")
      
                          {
      
                              if (results.Contains(myMemberInfo[i].Name))
      
                              {
      
                                  
      
                                  object v = myType.InvokeMember(myMemberInfo[i].Name,
      
                 BindingFlags.DeclaredOnly |
      
                 BindingFlags.Public | BindingFlags.NonPublic |
      
                 BindingFlags.Instance | BindingFlags.GetProperty, null, item, null);
      
                                  tempStr = tempStr.Replace("#" + myMemberInfo[i].Name + "#", v.ToString());                         
      
                              }                     
      
                          }
      
                       
      
                      }
      
                      sb.Append(tempStr);
      
                  }
      
                  return sb.ToString();
      
              }

      其中的#\\w{1,}#匹配對(duì)象為”#中間為字符,字符數(shù)量大于1個(gè)#”,這里約定好被綁定的數(shù)據(jù)源的屬性名在兩個(gè)#之間,當(dāng)然也可以類似aspx<%#神馬的 %>

      遍歷正則匹配到的屬性:

          public class RegularHelper
      
          {
      
              private static List<string>  Result {get;set;}
      
              public static List<string> GetResult(Match mt)
      
              {
      
                  List<string> r = new List<string>();
      
                  GetMatchValues(mt,r);
      
                  return r;
      
              }
      
              private static void GetMatchValues(Match mt, List<string> r)
      
              {
      
                  r.Add(mt.Value.TrimStart('#').TrimEnd('#'));
      
                  if (mt.NextMatch().Length > 0)
      
                      GetMatchValues(mt.NextMatch(),r);
      
              }
      
          }

      上面的GetMatchValues遞歸遍歷出所有匹配的對(duì)象。

       

      思考題

      支持這種寫法#Name.substring(0,12)+”……”#

      下載試用

      主站蜘蛛池模板: 撕开奶罩揉吮奶头高潮av| 国产麻传媒精品国产av| 制服丝袜人妻有码无码中文字幕| 国产精品成人av在线观看春天 | 漂亮的保姆hd完整版免费韩国 | 亚洲精品久久久久久久久久吃药| 99国产精品一区二区蜜臀| gogo无码大胆啪啪艺术| 国产AV影片麻豆精品传媒| 亚洲国产综合精品2020| 天堂а√在线中文在线| 无码人妻一区二区三区AV| 亚洲最大中文字幕无码网站| 国产91精品一区二区麻豆| 亚洲国产欧美一区二区好看电影| 国产免费午夜福利757| 无码av中文字幕久久专区| 99久久99久久精品免费看蜜桃| 日韩丝袜亚洲国产欧美一区| 色欲av无码一区二区人妻| 国产亚洲一区二区三区成人| 国产精品欧美福利久久 | 乱人伦中文视频在线| 四川丰满少妇无套内谢| 色欲av亚洲一区无码少妇| 国产乱码日韩精品一区二区| 麻豆国产成人AV在线播放| 小污女小欲女导航| 人妻教师痴汉电车波多野结衣| 久久高潮少妇视频免费| 国产免费视频一区二区| 亚洲无av在线中文字幕| 久久久久免费看成人影片| 亚洲国产成人久久77| 中文字幕免费一二三区乱码| 欧美日产国产精品| 精品国产乱码一区二区三区| 亚洲一区二区三成人精品| 日韩人妻精品中文字幕| 无码天堂亚洲国产AV| 69天堂人成无码免费视频|