以下SQL以防以后还需用到,特此备份

删除一条留言信息会级联删除回复信息,这时我们需要用到事务,如下SQL

 1 ALTER PROCEDURE [dbo].[proc_tb_leaveword_delete]
 2 ( 
 3     @leavewordID INT,
 4     @record TINYINT OUTPUT
 5 )    
 6 AS
 7 BEGIN
 8     BEGIN TRY
 9         BEGIN TRANSACTION
10             DELETE FROM tb_leavewordID WHERE leavewordID=@leavewordID
11             DELETE FROM tb_reply WHERE leavewordID=@leavewordID
12             SET @record=0 --成功
13             COMMIT TRANSACTION
14     END TRY
15     BEGIN CATCH
16         ROLLBACK TRANSACTION
17         SET @record=-1 --失败
18     END CATCH
19     RETURN @record
20 END

删除一条新闻,一条新闻可能有多条留言,每条留言可能有回复信息,这时我们删除一条新闻的SQL如下

 1 ALTER PROCEDURE [dbo].[proc_tb_news_delete]
 2 ( 
 3     @newsID INT,
 4     @record TINYINT OUTPUT
 5 )    
 6 AS
 7 BEGIN
 8     DECLARE @leavewordCount INT --留言个数
 9     DECLARE @delete_where VARCHAR(4000) --留言id字符,类似1,2,4,5,6
10     SET @leavewordCount=(SELECT ISNULL(COUNT(1),0) FROM tb_leaveword WHERE newsID=@newsID)
11     SET @delete_where=''
12 
13     IF(@leavewordCount=0) --此条新闻无留言时
14         BEGIN TRY
15             DELETE FROM tb_news WHERE newsID=@newsID
16             SET @record=0 --成功
17         END TRY
18         BEGIN CATCH
19             SET @record=-1 --失败
20         END CATCH
21 
22     ELSE IF(@leavewordCount>0) --此条新闻有留言时
23        ----获取删除条件(start)----
24        DECLARE MY_CURSOR CURSOR
25        FOR SELECT leavewordID FROM tb_news WHERE newsID=@newsID
26        BEGIN
27            DECLARE @leavewordID INT
28            OPEN MY_CURSOR
29            FETCH NEXT FROM MY_CURSOR INTO @leavewordID
30            IF(@leavewordID IS NOT NULL)
31                SET @delete_where=@delete_where+CAST(@leavewordID AS VARCHAR(10))+','
32                WHILE(@@FETCH_STATUS<>-1)
33                    BEGIN
34                        SET @leavewordID=NULL
35                        FETCH NEXT FROM MY_CURSOR INTO @leavewordID
36                        IF(@leavewordID IS NOT NULL)
37                            SET @delete_where=@delete_where+CAST(@leavewordID AS VARCHAR(10))+','
38                    END
39         END
40         CLOSE MY_CURSOR
41         DEALLOCATE MY_CURSOR
42         SET @delete_where=SUBSTRING(@delete_where,1,LEN(@delete_where)-1)
43         ----获取删除条件(end)----
44         BEGIN
45             BEGIN TRY
46                 BEGIN TRANSACTION
47                     DELETE FROM tb_news WHERE newsID=@newsID
48                     EXECUTE('DELETE FROM tb_leaveword WHERE leavewordID IN('+@delete_where+')')
49                     EXECUTE('DELETE FROM tb_reply WHERE leavewordID IN('+@delete_where+')')
50                     SET @record=0 --成功
51                     COMMIT TRANSACTION
52             END TRY
53             BEGIN CATCH
54                 ROLLBACK TRANSACTION
55                 SET @record=-1 --失败
56             END CATCH
57         END
58      RETURN @record
59 END

删除一新闻类型时,可能此类型下有多条新闻,此条新闻下又有多条留言,留言下又有多条回复,依次级联删除,如下存储过程

 

 1 ALTER PROCEDURE [dbo].[proc_tb_news_type_delete]
 2 ( 
 3     @typeID INT,
 4     @record TINYINT OUTPUT
 5 )
 6 AS
 7 BEGIN
 8     DECLARE @newsCount INT --此类新闻下的新闻个数
 9     SET @newsCount=(SELECT ISNULL(COUNT(1),0) FROM tb_news WHERE typeID=@typeID)
10     IF(@newsCount=0) --此类型下无新闻
11         BEGIN TRY
12             DELETE FROM tb_news_type WHERE typeID=@typeID
13             SET @record=0 --成功
14         END TRY
15         BEGIN CATCH
16             SET @record=-1 --失败
17         END CATCH
18     
19     ELSE IF(@newsCount>0) --此类型下有新闻
20         BEGIN TRY
21             BEGIN TRANSACTION
22                 DECLARE MY_CURDOR CURSOR
23                 FOR SELECT newsID FROM tb_news WHERE typeID=@typeID
24                 BEGIN
25                     DECLARE @newsID INT
26                     OPEN MY_CURSOR
27                     FETCH NEXT FROM MY_CURSOR INTO @newsID
28                     IF(@newsID IS NOT NULL)
29                         DELETE FROM tb_news_type WHERE typeID=@typeID
30                         EXECUTE proc_tb_news_delete @newsID=@newsID --执行存储过程
31                         WHILE(@@FETCH_STATUS<>-1)
32                             BEGIN
33                                 SET @newsID=NULL
34                                 FETCH NEXT FROM MY_CURSOR INTO @newsID
35                                 IF(@newsID IS NOT NULL)
36                                     DELETE FROM tb_news_type WHERE typeID=@typeID
37                                     EXECUTE proc_tb_news_delete @newsID=@newsID --执行存储过程
38                             END
39                 END
40                 CLOSE MY_CURSOR
41                 DEALLOCATE MY_CURSOR
42                 COMMIT TRANSACTION
43         END TRY
44         BEGIN CATCH
45             ROLLBACK TRANSACTION
46             SET @record=-1 --失败
47         END CATCH
48      RETURN @record
49 END

 当删除多条新闻类型时,我们需要把拼接好的类型id,例如:1,2,4,5,12,34,穿入存储过程,分割字符的SQL语句如下所示:

 1 DECLARE @A VARCHAR(5000)
 2 DECLARE @i INT
 3 SET @A='A,B,C,D,D,S,X,C,C,C,D,AAAA,DDDDDD,DEF,ERT,'
 4 SET @i=CHARINDEX(',',@A)
 5 
 6 WHILE @i>=1
 7 BEGIN
 8     PRINT LEFT(@A,@i-1)
 9     SET @A=SUBSTRING(@A,@i+1,LEN(@A)-1)
10     SET @i=CHARINDEX(',',@A)
11 END

删除多条新闻类型SQL如下:

 1 ALTER PROCEDURE [dbo].[proc_tb_news_type_selects_delete]
 2 ( 
 3     @typeID_list VARCHAR(500),
 4     @record TINYINT OUTPUT
 5 )
 6 AS
 7 BEGIN
 8     BEGIN TRY
 9             BEGIN TRANSACTION
10                 DECLARE @index INT
11                 DECLARE @typeID INT
12                 SET @typeID_list=RTRIM(LTRIM(@typeID_list))
13                 SET @index=CHARINDEX(',',@typeID_list)
14                 WHILE @index>=1
15                     BEGIN
16                         SET @typeID=CAST(LEFT(@typeID_list,@index-1) AS INT)
17                         EXECUTE proc_tb_news_type_delete @typeID=@typeID
18                         SET @typeID_list=SUBSTRING(@typeID_list,@index+1,LEN(@typeID_list)-1)
19                         SET @index=CHARINDEX(',',@typeID_list)
20                     END
21             COMMIT TRANSACTION
22             SET @record=0 --成功
23     END TRY
24     BEGIN CATCH
25         ROLLBACK TRANSACTION
26         SET @record=-1 --失败
27     END CATCH
28     RETURN @record
29 END

如需转载,请注明出处

posted @ 2012-04-25 12:17 xu_happy_you 阅读(147) 评论(0) 编辑

类泛型的约束:

1 public static class ToModel<T> where T : class, new()

定义委托:

1 public delegate void SetString(string value);

创建委托方法:

1 private static SetString CreateStringDelegate(T model, string propertyName)
2 {
3    MethodInfo mi = model.GetType().GetProperty(propertyName).GetSetMethod();
4    Type type = typeof(SetString);
5    return Delegate.CreateDelegate(type, model, mi) as SetString;
6  }

利用反射和委托将DataTable转换为实体集:

 1         public static IList<T> GetDelegate_ToModelList(DataTable dt)
 2         {
 3             IList<T> list = new List<T>();
 4             if (dt == null || dt.Rows.Count < 1) return list;
 5             SetString setDelegateString;
 6             foreach (DataRow dr in dt.Rows)
 7             {
 8                 T model = new T();
 9                 foreach (DataColumn dc in dt.Columns)
10                 {
11                     setDelegateString = CreateStringDelegate(model, dc.ColumnName);
12                     setDelegateString(dr[dc.ColumnName].ToString());
13                 }
14                 list.Add(model);
15             }
16             return list;
17         }

这样写问题就来了,因为委托定义的参数时string类型的,因为我们实体中可能有int或者DateTime类型的,这时就需要用上泛型委托了

如果这样定义委托:

1 public delegate void SetString<PT>(PT value)

创建委托方法(这里有问题,不知如何处理):

1         private static SetString CreateStringDelegate(T model, string propertyName)
2         {
3             MethodInfo mi = model.GetType().GetProperty(propertyName).GetSetMethod();
4             Type type = typeof(model).GetProperty(propertyName).PropertyType;
5             return Delegate.CreateDelegate(type, model, mi) as SetString<type>;
6         }

利用反射和委托将DataTable转换为实体集:

 1         public static IList<T> GetDelegate_ToModelList(DataTable dt)
 2         {
 3             IList<T> list = new List<T>();
 4             if (dt == null || dt.Rows.Count < 1) return list;
 5             foreach (DataRow dr in dt.Rows)
 6             {
 7                 T model = new T();
 8                 foreach (DataColumn dc in dt.Columns)
 9                 {
10                     SetString<typeof(T).GetProperty(dc.ColumnName).PropertyType> setDelegateString = CreateStringDelegate(model, dc.ColumnName);
11                     setDelegateString(dr[dc.ColumnName].ToString());
12                 }
13                 list.Add(model);
14             }
15             return list;
16         }

一直疑惑着,希望有人帮我解决疑惑,直接反射的方法我也有,但是这个问题不解决,心里一直有疙瘩,希望有人帮帮忙,谢谢!

posted @ 2012-04-19 15:11 xu_happy_you 阅读(625) 评论(1) 编辑

原来也写过一篇关于百度Ueditor编辑器的介绍:百度Ueditor编辑器的使用,ASP.NET也可上传图片

最开始是使用CuteEditor控件,需要好几mb的空间,因为刚开始学习ASP.NET的时候,觉得简单就是拉控件上去,后来自己发现了百度Ueditor编辑器,再后来看见热心人的评论也知道了KindEditor编辑器,后来也改用了这个 KindEditor编辑器 ,因为它比百度编辑器占的空间小,感觉也好一点,后来做网站,有时站内留言或者发贴子,我觉得这类编辑器功能太多了点,总感觉只适合新闻类编辑器,后来就网上不停的百度和Google查找,找了很久看见了淘宝开源的Kissy Editor编辑器,感觉很好,后来不小心在博客园又发现了一个简易的编辑器,感觉更容易看懂,也方便修改,只是界面没有淘宝的好看,但是对于简易的留言板还是够用了,两编辑器界面如下所示:

 Kissy Editor编辑器

 

简易编辑器,是查看了博客园http://www.cnblogs.com/lexus/archive/2010/09/12/1824214.html这篇博客

 

 kissy editor目录结构如下图所示:

 

kissy editor可以根据个人需求,ToolBar可以控制显示哪些,可输入字符个数,等等都可以在editor-aio.js脚本文件中修改,由于此脚本只显示一行,找到相应修改的位置有点困难,你可以先查看editor.js脚本文件,找到需要修改的地方,然后在editor-aio.js中查找,如下修改字符个数的操作,如图所示:

kissy editor 的工具条也可以找到相应的editor-aio.js 文件进行修改,如下图所示:

 

淘宝上下载,会有一个demo的例子,由于我不想在此目录下面,因为我写的一个小例子,不在此目录下方,我就修改了路径,原有的那个demo.html中图像选择会显示不出图片,如下图所示:

 

需要按照自己的项目需求而修改,这里只是举了一个简单的例子。

kissy editor 的使用代码如下所示:

 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5     <link href="kissy_editor/themes/default/editor-min.css" rel="stylesheet" type="text/css" />
 6     <style type="text/css">
 7     #Submit1{ padding:5px 5px 5px 5px;}
 8     </style>
 9 </head>
10 <body>
11 <form action="data.aspx" method="post">
12 <textarea id="demo" name="code" cols="142" rows="15">
13    <p>欢迎使用 KISSY Editor!</p>
14 </textarea>
15 <p><input id="Submit1" type="submit" value="提交" /></p>
16 </form>
17 <script src="kissy_editor/editor-aio.js" type="text/javascript"></script>
18 <script type="text/javascript">KISSY.Editor("demo");</script>
19 </body>
20 </html>

 下面说一下简易HTMl编辑器,使用方式如下代码所示:

 2 
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5     <title></title>
 6     <script src="js/jquery-1.4.2.min.js" type="text/javascript"></script>
 7     <script src="ebox/ebox.js" type="text/javascript"></script>
 8 </head>
 9 <body>
10 <form action="data.aspx" method="post">
11   <textarea name="code" id="ebox">欢迎使用简易编辑器</textarea>
12   <p><input type="submit" value="submit" /></p>
13 </form>
14 <div style=" margin:0 auto; text-align:center;"></div>
15 <script type="text/javascript">
16     $("#ebox").css("height", "350px").css("width", "100%").htmlbox({
17         toolbars: [
18         [
19         "undo", "redo", "removeformat", "bold",
20         "underline", "strike", "italic", "sup", "sub",
21         "left", "center", "right", "indent", "outdent",
22         "link", "unlink", "image", "quote", "striptags", "code",
23         "fontcolor", "highlight", "fontsize", "fontfamily", "styles"
24         ]
25     ]
26     });
27 </script>
28 </body>
29 </html>

 相信你看见了代码,就知道可以更改ToolBar显示哪些已有的功能,很简单吧。

 写了有些凌乱,不要见怪,在此分享,那些需要简易编辑器的,下载使用,还是不错的选择。

 下载地址:点击这里下载

版权所有,转载请注明出处!

一切伟大的行动和思想,都有一个微不足道的开始。微不足道的我,正在吸取知识的土壤,希望能取得成功!不嫌弃我微不足道的,愿交天下好友!

posted @ 2012-04-17 09:22 xu_happy_you 阅读(3158) 评论(9) 编辑
摘要: 原来一直搞ASP.NET,现在工作又主要搞WinFrom,真的很不习惯,一个控件那么多事件和属性,做什么都要不停地查MSDN今天工作没事情做,为了能熟悉一下Winform里的控件,自己就做点小小东西来熟悉一下。鄙人不才,不是很会写博客,今天深圳下好大的雨,都淋湿了,一回来就想和大家分享一下自己的成果,知识来自于网路,服务于网络,大家不要喷,谢谢!先是一个简单的输入服务和帐号信息的登录窗体,其实可以把服务换成CommBox控件绑定本地电脑的SQL服务,鄙人不才,没有弄出来,如果你知道怎么搞,给点意见:登录示例图如下:如果数据量大,获取每个数据库中表以及字段信息,会有点慢,所以TreeView每点阅读全文
posted @ 2012-04-13 20:05 xu_happy_you 阅读(2307) 评论(25) 编辑

什么是LINQ

  • LINQ(发音为link)代表语言集成查询(Language Integrated Query)
  • 详细见LINQ

匿名类型

第一个成员初始化器是赋值形式,第二个是成员访问表达式,第三个是标示符形式,如下实例所示:

1 string Sex = "";
2 var person = new { Age = 24, SimpleClass.Name, Sex };
3 Console.WriteLine("{0},Sex{1},Age {2}",person.Name,person.Sex,person.Age);

运行结果:

注意标示符形式和访问表达式必须定义在匿名类型申明之前,Sex是一个局部变量,Name是类SimpleClass的静态字段。

尽管在代码中看不到匿名类型,对象浏览器却能看到。如果编译器遇到了另一个具有相同参数名、相同引用类型名和相同顺序的匿名类型,它会重用这个类型并直接创建新的实例,而不会创建新的匿名类型。

查询语法和方法语法

  • 查询语法(query syntax)是声明形式的,看上去和SQL的语句很相似。查询语法使用查询表达式书写。
  • 方法语法(method syntax)是命令形式,它的使用是标准的方法调用。方法是一组叫做标准查询运算符的方法。
  • 在一个查询中也可以组合以上两种形式。

示例代码如下所示:

 1 var query1 = from n in Enumerable.Range(1, 10)
 2 where n < 8
 3 select n;
 4 Console.Write("查询语法得到结果:");
 5 foreach (var v in query1) Console.Write("{0}\t",v);
 6
 7 var query2 = Enumerable.Range(1, 8).Where(n => n < 8);
 8 Console.WriteLine("");
 9 Console.Write("方法语法得到结果:");
10 foreach (var v in query2) Console.Write("{0}\t", v);
11
12 int count = (from n in Enumerable.Range(1, 10)
13 where n < 8
14 select n).Count();
15 Console.WriteLine("");
16 Console.WriteLine("两种方式的组合:{0}", count);

运行结果:

查询表达式的结构

1、from子句

  • from子句指定了要作为数据源使用的数据集合。它也引入了迭代变量,迭代变量有序表示数据源的每一个元素。
1 int[] arr = { 1, 5, 9, 8, 45, 23, 26, 14, 7, 8, 9 };
2 var query = from n in arr //(n->迭代变量)
3 where n < 10 //使用迭代变量
4 select n; //使用迭代变量
5 foreach (var v in query) Console.Write("{0}\t",v);
6 Console.WriteLine("");

运行结果:

2、join子句

  • LINQ中的join子句和SQL中的join很相似,连接操作接受两个集合然后创建一个临时的对象集合,每个对象包含原始集合对象中的所有字段,使用连接来结合两个或更多个集合中的数据。

示例代码如下:

 1 public class Student
 2  {
 3 public int StID;
 4 public string LastName;
 5  }
 6 public class CourseStudent
 7  {
 8 public string CourseName;
 9 public int StID;
10  }
11
12 CourseStudent[] studentInCourses = new CourseStudent[]{
13 new CourseStudent{CourseName="Art",StID=1},
14 new CourseStudent{CourseName="Art",StID=3},
15 new CourseStudent{CourseName="History",StID=1},
16 new CourseStudent{CourseName="History",StID=2},
17 new CourseStudent{CourseName="Physics",StID=3}
18  };
19 Student[] students = new Student[] {
20 new Student{StID=1,LastName="张三"},
21 new Student{StID=2,LastName="李四"},
22 new Student{StID=3,LastName="王五"}
23  };
24
25 //获取选修2门课以上同学的名字
26 var query = (from s in students
27 join c in studentInCourses on s.StID equals c.StID
28 where (from x in studentInCourses where x.StID==c.StID select x.StID).Count()>1
29 select s.LastName).Distinct();
30 foreach (var v in query) Console.Write("{0}\t",v);
31 Console.WriteLine("");
32 //获取选修历史同学的名字
33 var query1 = from s in students
34 join c in studentInCourses on s.StID equals c.StID
35 where c.CourseName == "History"
36 select s.LastName;
37 foreach (var v in query1) Console.Write("{0}\t", v);

运行结果:

查询主体中的from...let...where片段

  • 可选的from...let...where部分是查询主体的第一部分,可以由任意数量的3个子句来组合--from子句、let子句和where子句。

1、from子句

  • 查询表达式必须从from子句开始,后面跟的是查询主体。主体本身可以从任何数量的其他from子句开始,每一个from子句都指定了一个额外的数据源集合并引入了要在之后运算的迭代变量,所有from子句的语法和含义都是一样的。

示例代码如下:

1 var someInts = from a in Enumerable.Range(1, 5) //必须的第一个from子句
2 from b in Enumerable.Range(6, 5) //查询主体的第一个子句
3 where a < 3 && b < 10
4 select new { a, b, sum = a + b }; //匿名类型对象
5 foreach (var v in someInts) Console.WriteLine(v);

 2、let子句

  • let子句接受一个表达式的运算并把它赋值给一个需要在其他运算中使用的标示符。

示例代码如下:

1 var someInts = from a in Enumerable.Range(1, 5)
2 from b in Enumerable.Range(6, 5)
3 let sum = a + b //在新的变量中保存结果
4 where sum == 12
5 select new { a, b, sum };
6 foreach (var v in someInts) Console.WriteLine(v);

运行结果:

3、where子句

  • where子句根据之后的运算来去除不符合指定条件的项。

示例代码如下:

1 var someInts = from a in Enumerable.Range(1, 5)
2 from b in Enumerable.Range(6, 5)
3 let sum = a + b
4 where sum > 12 //条件一
5 where a==4 //条件二
6 select new { a, b, sum };
7 foreach (var v in someInts) Console.WriteLine(v);

运行结果:

orderby子句

  • orderby子句接受一个表达式并根据表达式依次返回结果项,orderby子句的默认排序是升序,然而我们可以使用ascending和descending关键词显示第设置元素排序为升序或降序,ordery可以有任意多个子句,它们必须用逗号隔开。

示例代码如下:

 1 var persons = new[] { //匿名类型的对象数组
 2 new {Name="张三",Sex="",Age=32,Address="广东深圳"},
 3 new {Name="李四",Sex="",Age=26,Address="广东广州"},
 4 new {Name="王五",Sex="",Age=22,Address="广东深圳"},
 5 new {Name="赵六",Sex="",Age=33,Address="广东东莞"}
 6  };
 7 var query = from p in persons
 8 orderby p.Age
 9 select p;
10 foreach (var p in query) Console.WriteLine("Name:{0},Sex:{1},Age:{2},Address:{3}", p.Name, p.Sex, p.Age, p.Address);

运行结果:

group by子句

  • group子句把select的对象根据一些标准进行分组。例如,有了前面示例人的数组,程序可以根据它们的所在地进行分组。
  • group by如果项包含在查询结果中,它们就可以根据某个字段的值进行分组。作为分组依据的项叫做键(key);和select子句不同,group子句不从原始的数据源中返回可枚举的可枚举类型,而是返回以枚举已经形成的项的分组的可枚举类型;分组本身是可枚举类型,它们可枚举实际的项。

示例代码如下:

 1 var persons = new[] { //匿名类型的对象数组
 2 new {Name="张三",Sex="",Age=32,Address="广东深圳"},
 3 new {Name="李四",Sex="",Age=26,Address="广东广州"},
 4 new {Name="王五",Sex="",Age=22,Address="广东深圳"},
 5 new {Name="赵六",Sex="",Age=33,Address="广东东莞"}
 6  };
 7 var query = from p in persons
 8  group p by p.Address;
 9 foreach (var v in query) //枚举分组
10  {
11 Console.WriteLine("{0}",v.Key); //分组键
12 foreach (var t in v) //枚举分组中的项
13  {
14 Console.WriteLine("Name:{0},Sex:{1},Age:{2},Address:{3}", t.Name, t.Sex, t.Age, t.Address);
15  }
16 }

运行结果:

查询延续

  • 查询延续子句可以接受查询的一部分结果并赋予一个名字,从而可以查询的另一部分中使用。

示例代码如下:

1 var somInts = from a in Enumerable.Range(1, 10)
2 join b in Enumerable.Range(5, 10) on a equals b
3 into groupTemp //查询延续
4 from c in groupTemp
5 select c;
6 foreach (var v in somInts) Console.WriteLine(v);

运行结果如下:

使用委托参数和Lambda的示例

public static int Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

示例代码如下:

1 IList<int> list = Enumerable.Range(1, 100).ToList();
2 Func<int, bool> myDel = delegate(int x) { return x % 2 == 1; };//委托匿名方法
3 var countOdd1 = list.Count(myDel);//调用委托
4 var countOdd2 = list.Count(x => x % 2 == 1);//Lambda表达式
5 Console.WriteLine("委托参数得到奇数的个数:{0}",countOdd1);
6 Console.WriteLine("Lambda得到奇数的个数:{0}", countOdd2);

 

运行结果:

 版权所有,转载请注明出处!

一切伟大的行动和思想,都有一个微不足道的开始。微不足道的我,正在吸取知识的土壤,希望能取得成功!不嫌弃我微不足道的,愿交天下好友!

posted @ 2012-04-12 11:22 xu_happy_you 阅读(1418) 评论(4) 编辑
摘要: http://passport.cnblogs.com/ws/UserService.asmx因为用火狐浏览器查看源文件,不小心看见了这个web服务,就打开看了一下,发现居然可以使用,博客园管理团队,我觉得这里也可以改一改,不然别人调用我觉得也不利这个网站!The following operations are supported. For a formal definition, please review theService Description. ChangeDisplayName ChangeEmail ...阅读全文
posted @ 2012-03-23 10:44 xu_happy_you 阅读(349) 评论(2) 编辑
摘要: 页面样式图如下所示,搜索功能和分页条由于时间有限,还没有实现,实现起来应该也不是很难,例子写了有点臃肿,没有分层次,大家不要见怪!多选删除样式如下图所示:增删改查也是弹窗的形式去完成的,如下界面图界面就给大家介绍这么多,主要是来发布代码的部分代码如下所示:friendlink.js 1 /// <reference path="jquery-1.4.2-vsdoc.js" /> 2 var orderby = ""; 3 $(document).ready(function() { 4 InitData(1); //首次加载数据 5 6 $(阅读全文
posted @ 2012-03-18 14:44 xu_happy_you 阅读(3901) 评论(31) 编辑
摘要: 最近学习C#基础,特此做笔记,请不要喷!委托和类一样,是一种用户自定义的类型。类表示的是数据的集合,而委托保存的是一个或多个方法。1、申明委托类型delegate void MyDel(int x)上面代码申明了MyDel类型的委托,指明了这种类型的委托只会接受不返回值并且只有单个int参数的方法。2、创建委托对象委托是引用类型,因此有引用和对象。在委托类型申明之后,我们可以申明变量并创建类型的对象。class del{public del(){MyDel delVar = new MyDel(b.GetB);//实例方法,创建委托并保存引用 }delegate void MyDel(int 阅读全文
posted @ 2011-12-29 23:21 xu_happy_you 阅读(1308) 评论(9) 编辑
摘要: 创建迭代器最常用的方法是对 IEnumerable 接口实现 GetEnumerator 方法例如实现输出A-Z的实现: public class A{public System.Collections.IEnumerator GetEnumerator(){for (int i = 65; i <= 90; i++){yield return (char)i;}}}调用方法如下所示:GetEnumerator 方法的存在使得类型成为可枚举的类型,并允许使用foreach语句 static void Main(string[] args){foreach (char i in new A阅读全文
posted @ 2011-12-13 21:50 xu_happy_you 阅读(116) 评论(2) 编辑
摘要: 看着自己网站编译之后的源文件,里面很多乱七八糟的东西,看了就觉得不舒服<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE3NjgxMzM0MDIPZBYCZg9kFgIC……还有form源文件,一看就知道是asp.net的页面<form name="form1" method="post" action="smartDropDownList.aspx" i阅读全文
posted @ 2011-12-12 17:53 xu_happy_you 阅读(1779) 评论(33) 编辑