<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_sunrack</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/15093/rss</id><updated>2012-01-02T13:44:34Z</updated><author><name>sunrack</name><uri>http://www.cnblogs.com/sunrack/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sunrack/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/15093/rss"/><entry><id>http://www.cnblogs.com/sunrack/archive/2011/02/25/1964740.html</id><title type="text">LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains</title><summary type="text">我们继续讲解LINQ to SQL语句，这篇我们来讨论Group By/Having操作符和Exists/In/Any/All/Contains操作符。 Group By/Having操作符 适用场景：分组数据，为我们查找数据缩小范围。 说明：分配并返回对传入参数进行分组操作后的可枚举对象。分组；延迟 1.简单形式：var q = from p in db.Products group p by ...</summary><published>2011-02-25T04:54:00Z</published><updated>2011-02-25T04:54:00Z</updated><author><name>sunrack</name><uri>http://www.cnblogs.com/sunrack/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sunrack/archive/2011/02/25/1964740.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sunrack/archive/2011/02/25/1964740.html"/><content type="html">&lt;p&gt;我们继续讲解LINQ to SQL语句，这篇我们来讨论Group By/Having操作符和Exists/In/Any/All/Contains操作符。 &lt;p&gt;&lt;strong&gt;Group By/Having操作符&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;适用场景&lt;/strong&gt;：分组数据，为我们查找数据缩小范围。 &lt;p&gt;&lt;strong&gt;说明&lt;/strong&gt;：分配并返回对传入参数进行分组操作后的可枚举对象。分组；延迟 &lt;p&gt;&lt;strong&gt;1.简单形式：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var q =&#xD;
    from p in db.Products&#xD;
    group p by p.CategoryID into g&#xD;
    select g;&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：使用Group By按CategoryID划分产品。&#xD;
&lt;p&gt;说明：from p in db.Products 表示从表中将产品对象取出来。group p by p.CategoryID into g表示对p按CategoryID字段归类。其结果命名为g，一旦重新命名，p的作用域就结束了，所以，最后select时，只能select g。当然，也不必重新命名可以这样写：&lt;pre&gt;var q =&#xD;
    from p in db.Products&#xD;
    group p by p.CategoryID;&lt;/pre&gt;&#xD;
&lt;p&gt;我们用示意图表示：&#xD;
&lt;p&gt;&lt;a href="http://lyj.cnblogs.com/images/cnblogs_com/lyj/LINQ/LINQ17.gif"&gt;&lt;img alt="GroupBy分组统计示意图" src="http://lyj.cnblogs.com/images/cnblogs_com/lyj/LINQ/LINQ17.gif"&gt;&lt;/a&gt;&#xD;
&lt;p&gt;如果想遍历某类别中所有记录，这样：&lt;pre&gt;foreach (var gp in q)&#xD;
{&#xD;
    if (gp.Key == 2)&#xD;
    {&#xD;
        foreach (var item in gp)&#xD;
        {&#xD;
            //do something&#xD;
        }&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2.Select匿名类：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var q =&#xD;
    from p in db.Products&#xD;
    group p by p.CategoryID into g&#xD;
    select new { CategoryID = g.Key, g }; &lt;/pre&gt;&#xD;
&lt;p&gt;说明：在这句LINQ语句中，有2个property：CategoryID和g。这个匿名类，其实质是对返回结果集重新进行了包装。把g的property封装成一个完整的分组。如下图所示：&#xD;
&lt;p&gt;&lt;a href="http://lyj.cnblogs.com/images/cnblogs_com/lyj/LINQ/LINQ18.gif"&gt;&lt;img alt="GroupBy分组匿名类示意图" src="http://lyj.cnblogs.com/images/cnblogs_com/lyj/LINQ/LINQ18.gif" width="550" height="309"&gt;&lt;/a&gt;&#xD;
&lt;p&gt;如果想遍历某匿名类中所有记录，要这么做：&lt;pre&gt;foreach (var gp in q)&#xD;
{&#xD;
    if (gp.CategoryID == 2)&#xD;
    {&#xD;
        foreach (var item in gp.g)&#xD;
        {&#xD;
            //do something&#xD;
        }&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.最大值&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var q =&#xD;
    from p in db.Products&#xD;
    group p by p.CategoryID into g&#xD;
    select new {&#xD;
        g.Key,&#xD;
        MaxPrice = g.Max(p =&amp;gt; p.UnitPrice)&#xD;
    };&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：使用Group By和Max查找每个CategoryID的最高单价。&#xD;
&lt;p&gt;说明：先按CategoryID归类，判断各个分类产品中单价最大的Products。取出CategoryID值，并把UnitPrice值赋给MaxPrice。&#xD;
&lt;p&gt;&lt;strong&gt;4.最小值&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var q =&#xD;
    from p in db.Products&#xD;
    group p by p.CategoryID into g&#xD;
    select new {&#xD;
        g.Key,&#xD;
        MinPrice = g.Min(p =&amp;gt; p.UnitPrice)&#xD;
    };&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：使用Group By和Min查找每个CategoryID的最低单价。&#xD;
&lt;p&gt;说明：先按CategoryID归类，判断各个分类产品中单价最小的Products。取出CategoryID值，并把UnitPrice值赋给MinPrice。&#xD;
&lt;p&gt;&lt;strong&gt;5.平均值&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var q =&#xD;
    from p in db.Products&#xD;
    group p by p.CategoryID into g&#xD;
    select new {&#xD;
        g.Key,&#xD;
        AveragePrice = g.Average(p =&amp;gt; p.UnitPrice)&#xD;
    };&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：使用Group By和Average得到每个CategoryID的平均单价。&#xD;
&lt;p&gt;说明：先按CategoryID归类，取出CategoryID值和各个分类产品中单价的平均值。&#xD;
&lt;p&gt;&lt;strong&gt;6.求和&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var q =&#xD;
    from p in db.Products&#xD;
    group p by p.CategoryID into g&#xD;
    select new {&#xD;
        g.Key,&#xD;
        TotalPrice = g.Sum(p =&amp;gt; p.UnitPrice)&#xD;
    };&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：使用Group By和Sum得到每个CategoryID 的单价总计。&#xD;
&lt;p&gt;说明：先按CategoryID归类，取出CategoryID值和各个分类产品中单价的总和。&#xD;
&lt;p&gt;&lt;strong&gt;7.计数&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var q =&#xD;
    from p in db.Products&#xD;
    group p by p.CategoryID into g&#xD;
    select new {&#xD;
        g.Key,&#xD;
        NumProducts = g.Count()&#xD;
    };&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：使用Group By和Count得到每个CategoryID中产品的数量。&#xD;
&lt;p&gt;说明：先按CategoryID归类，取出CategoryID值和各个分类产品的数量。&#xD;
&lt;p&gt;&lt;strong&gt;8.带条件计数&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var q =&#xD;
    from p in db.Products&#xD;
    group p by p.CategoryID into g&#xD;
    select new {&#xD;
        g.Key,&#xD;
        NumProducts = g.Count(p =&amp;gt; p.Discontinued)&#xD;
    };&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：使用Group By和Count得到每个CategoryID中断货产品的数量。&#xD;
&lt;p&gt;说明：先按CategoryID归类，取出CategoryID值和各个分类产品的断货数量。 Count函数里，使用了Lambda表达式，Lambda表达式中的p，代表这个组里的一个元素或对象，即某一个产品。&#xD;
&lt;p&gt;&lt;strong&gt;9.Where限制&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var q =&#xD;
    from p in db.Products&#xD;
    group p by p.CategoryID into g&#xD;
    where g.Count() &amp;gt;= 10&#xD;
    select new {&#xD;
        g.Key,&#xD;
        ProductCount = g.Count()&#xD;
    };&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：根据产品的―ID分组，查询产品数量大于10的ID和产品数量。这个示例在Group By子句后使用Where子句查找所有至少有10种产品的类别。&#xD;
&lt;p&gt;说明：在翻译成SQL语句时，在最外层嵌套了Where条件。&#xD;
&lt;p&gt;&lt;strong&gt;10.多列(Multiple Columns)&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var categories =&#xD;
    from p in db.Products&#xD;
    group p by new&#xD;
    {&#xD;
        p.CategoryID,&#xD;
        p.SupplierID&#xD;
    }&#xD;
        into g&#xD;
        select new&#xD;
            {&#xD;
                g.Key,&#xD;
                g&#xD;
            };&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：使用Group By按CategoryID和SupplierID将产品分组。&#xD;
&lt;p&gt;说明：既按产品的分类，又按供应商分类。在by后面，new出来一个匿名类。这里，Key其实质是一个类的对象，Key包含两个Property：CategoryID、SupplierID。用g.Key.CategoryID可以遍历CategoryID的值。&#xD;
&lt;p&gt;&lt;strong&gt;11.表达式(Expression)&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var categories =&#xD;
    from p in db.Products&#xD;
    group p by new { Criterion = p.UnitPrice &amp;gt; 10 } into g&#xD;
    select g;&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：使用Group By返回两个产品序列。第一个序列包含单价大于10的产品。第二个序列包含单价小于或等于10的产品。&#xD;
&lt;p&gt;说明：按产品单价是否大于10分类。其结果分为两类，大于的是一类，小于及等于为另一类。&#xD;
&lt;p&gt;&lt;strong&gt;Exists/In/Any/All/Contains操作符&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;适用场景&lt;/strong&gt;：用于判断集合中元素，进一步缩小范围。&#xD;
&lt;p&gt;&lt;strong&gt;Any&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;说明：用于判断集合中是否有元素满足某一条件；不延迟。（若条件为空，则集合只要不为空就返回True，否则为False）。有2种形式，分别为简单形式和带条件形式。&#xD;
&lt;p&gt;&lt;strong&gt;1.简单形式：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;仅返回没有订单的客户：&lt;pre&gt;var q =&#xD;
    from c in db.Customers&#xD;
    where !c.Orders.Any()&#xD;
    select c;&lt;/pre&gt;&#xD;
&lt;p&gt;生成SQL语句为：&lt;pre&gt;SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName],&#xD;
[t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region],&#xD;
[t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]&#xD;
FROM [dbo].[Customers] AS [t0]&#xD;
WHERE NOT (EXISTS(&#xD;
    SELECT NULL AS [EMPTY] FROM [dbo].[Orders] AS [t1]&#xD;
    WHERE [t1].[CustomerID] = [t0].[CustomerID]&#xD;
   ))&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2.带条件形式：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;仅返回至少有一种产品断货的类别：&lt;pre&gt;var q =&#xD;
    from c in db.Categories&#xD;
    where c.Products.Any(p =&amp;gt; p.Discontinued)&#xD;
    select c;&lt;/pre&gt;&#xD;
&lt;p&gt;生成SQL语句为：&lt;pre&gt;SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description],&#xD;
[t0].[Picture] FROM [dbo].[Categories] AS [t0]&#xD;
WHERE EXISTS(&#xD;
    SELECT NULL AS [EMPTY] FROM [dbo].[Products] AS [t1]&#xD;
    WHERE ([t1].[Discontinued] = 1) AND &#xD;
    ([t1].[CategoryID] = [t0].[CategoryID])&#xD;
    )&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;All&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;说明：用于判断集合中所有元素是否都满足某一条件；不延迟&#xD;
&lt;p&gt;&lt;strong&gt;1.带条件形式&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var q =&#xD;
    from c in db.Customers&#xD;
    where c.Orders.All(o =&amp;gt; o.ShipCity == c.City)&#xD;
    select c;&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：这个例子返回所有订单都运往其所在城市的客户或未下订单的客户。&#xD;
&lt;p&gt;&lt;strong&gt;Contains&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;说明：用于判断集合中是否包含有某一元素；不延迟。它是对两个序列进行连接操作的。&lt;pre&gt;string[] customerID_Set =&#xD;
    new string[] { "AROUT", "BOLID", "FISSA" };&#xD;
var q = (&#xD;
    from o in db.Orders&#xD;
    where customerID_Set.Contains(o.CustomerID)&#xD;
    select o).ToList();&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：查找"AROUT", "BOLID" 和 "FISSA" 这三个客户的订单。先定义了一个数组，在LINQ to SQL中使用Contains，数组中包含了所有的CustomerID，即返回结果中，所有的CustomerID都在这个集合内。也就是in。 你也可以把数组的定义放在LINQ to SQL语句里。比如：&lt;pre&gt;var q = (&#xD;
    from o in db.Orders&#xD;
    where (&#xD;
    new string[] { "AROUT", "BOLID", "FISSA" })&#xD;
    .Contains(o.CustomerID)&#xD;
    select o).ToList();&lt;/pre&gt;&#xD;
&lt;p&gt;Not Contains则取反：&lt;pre&gt;var q = (&#xD;
    from o in db.Orders&#xD;
    where !(&#xD;
    new string[] { "AROUT", "BOLID", "FISSA" })&#xD;
    .Contains(o.CustomerID)&#xD;
    select o).ToList();&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1.包含一个对象：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;var order = (from o in db.Orders&#xD;
             where o.OrderID == 10248&#xD;
             select o).First();&#xD;
var q = db.Customers.Where(p =&amp;gt; p.Orders.Contains(order)).ToList();&#xD;
foreach (var cust in q)&#xD;
{&#xD;
    foreach (var ord in cust.Orders)&#xD;
    {&#xD;
        //do something&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：这个例子使用Contain查找哪个客户包含OrderID为10248的订单。&#xD;
&lt;p&gt;&lt;strong&gt;2.包含多个值：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;string[] cities = &#xD;
    new string[] { "Seattle", "London", "Vancouver", "Paris" };&#xD;
var q = db.Customers.Where(p=&amp;gt;cities.Contains(p.City)).ToList();&lt;/pre&gt;&#xD;
&lt;p&gt;语句描述：这个例子使用Contains查找其所在城市为西雅图、伦敦、巴黎或温哥华的客户。&#xD;
&lt;p&gt;总结一下这篇我们说明了以下语句：&#xD;
&lt;p&gt;Group By/Having&lt;br&gt;分组数据；延迟&#xD;
&lt;p&gt;Any&lt;br&gt;用于判断集合中是否有元素满足某一条件；不延迟&#xD;
&lt;p&gt;All&lt;br&gt;用于判断集合中所有元素是否都满足某一条件；不延迟&#xD;
&lt;p&gt;Contains&lt;br&gt;用于判断集合中是否包含有某一元素；不延迟&#xD;
&lt;p&gt;本系列链接：&lt;a href="http://www.cnblogs.com/lyj/archive/2008/03/24/1119671.html"&gt;LINQ体验系列文章导航&lt;/a&gt;&lt;img src="http://www.cnblogs.com/sunrack/aggbug/1964740.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sunrack/archive/2011/02/25/1964740.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sunrack/archive/2011/02/25/1964737.html</id><title type="text">ASPxPopupControl does not show up in the right place</title><summary type="text">Created by Haithem at 2010/6/4 23:28:11 Attachment: Project.rar (27522 bytes) Hi there, I am trying to follow your example, so i can warn the user for some requirement http://demos.devexpress.com/ASPxperienceDemos/PopupControl/ClientSideAPI.aspx I have attached a test project, in which i have the as</summary><published>2011-02-25T04:52:00Z</published><updated>2011-02-25T04:52:00Z</updated><author><name>sunrack</name><uri>http://www.cnblogs.com/sunrack/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sunrack/archive/2011/02/25/1964737.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sunrack/archive/2011/02/25/1964737.html"/><content type="html">&lt;p&gt;Created by Haithem at 2010/6/4 23:28:11 &lt;br /&gt;Attachment: Project.rar (27522 bytes) &lt;/p&gt;&#xD;
&lt;p&gt;Hi there, &lt;/p&gt;&#xD;
&lt;p&gt;I am trying to follow your example, so i can warn the user for some requirement &lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://demos.devexpress.com/ASPxperienceDemos/PopupControl/ClientSideAPI.aspx"&gt;http://demos.devexpress.com/ASPxperienceDemos/PopupControl/ClientSideAPI.aspx&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;I have attached a test project, in which i have the aspxtextbox within an aspxnavbar. My issue is the aspxpopcontrol does not show near by the appropriate element. Could you check what i am doing wrong here. &lt;/p&gt;&#xD;
&lt;p&gt;Thank you for your help&lt;br /&gt;Reviewed by DevExpress Team at 2010/6/5 1:45:51 &lt;/p&gt;&#xD;
&lt;p&gt;Processed (Answered) by DevExpress Team at 2010/6/7 11:53:22 &lt;br /&gt;Attachment: Project_Q261869.zip (32759 bytes) &lt;/p&gt;&#xD;
&lt;p&gt;Hello Mohamed Haithem, &lt;/p&gt;&#xD;
&lt;p&gt;I'd like to note that the PopupWindow.PopupElementID property requires a Control.UniqueID. However, if a control resides in a naming container (ASPxNavBar in your situation, or similar), then its Control.UniqueID doesn't equal Control.ID and Control.ClientInstanceName. In your case, the ASPxTextBox.UniqueID is formed dynamically. &lt;/p&gt;&#xD;
&lt;p&gt;As a solution, I suggest that you set the PopupElementID property at runtime. For example: &lt;/p&gt;&#xD;
&lt;p&gt;[C#] &lt;/p&gt;&#xD;
&lt;p&gt;protected void Page_Load(object sender, EventArgs e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ASPxTextBox txt1 = ASPxNavBar1.Groups[0].FindControl("text1") as ASPxTextBox;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pcErrorW.Windows[0].PopupElementID = txt1.UniqueID; &lt;/p&gt;&#xD;
&lt;p&gt;ASPxTextBox txt2 = ASPxNavBar1.Groups[1].FindControl("text2") as ASPxTextBox;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pcErrorW.Windows[1].PopupElementID = txt2.UniqueID;&lt;br /&gt;} &lt;br /&gt;I've modified your project accordingly. Please check it, and let me know the result. &lt;/p&gt;&#xD;
&lt;p&gt;Thanks,&lt;br /&gt;Marion&lt;/p&gt;&#xD;
&lt;p&gt;﻿&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Page_Load(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, EventArgs e) {&lt;br /&gt;            ASPxTextBox txt1 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; ASPxNavBar1.Groups[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;].FindControl(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;text1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; ASPxTextBox;&lt;br /&gt;            pcErrorW.Windows[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;].PopupElementID &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; txt1.UniqueID;&lt;br /&gt;&lt;br /&gt;            ASPxTextBox txt2 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; ASPxNavBar1.Groups[&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;].FindControl(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;text2&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; ASPxTextBox;&lt;br /&gt;            pcErrorW.Windows[&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;].PopupElementID &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; txt2.UniqueID;&lt;br /&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;﻿&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sunrack/aggbug/1964737.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sunrack/archive/2011/02/25/1964737.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sunrack/archive/2011/01/11/1932841.html</id><title type="text">C++/CLI托管字符串与非托管char数组的转换</title><summary type="text">CLI 显示行号 复制代码 ？ 这是一段程序代码。 C#显示行号 复制代码 ？ 这是一段程序代码。</summary><published>2011-01-11T06:12:00Z</published><updated>2011-01-11T06:12:00Z</updated><author><name>sunrack</name><uri>http://www.cnblogs.com/sunrack/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sunrack/archive/2011/01/11/1932841.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sunrack/archive/2011/01/11/1932841.html"/><content type="html">&lt;p&gt;CLI&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div &gt; &lt;div  title="标题"&gt;&lt;span  title="工具栏区域"&gt;&lt;span  onmouseover="ChangeIcon(this,true)" title="显示/隐藏源代码行号" tabindex="0" onmouseout="ChangeIcon(this,false)" onclick="LineNumberVisible(this)"&gt;显示行号&lt;/span&gt; &lt;span  onmouseover="ChangeIcon(this,true)" title="将源代码复制到剪贴板上" tabindex="1" onkeypress="CopyCode_CheckKey(this,true)" onmouseout="ChangeIcon(this,false)" onclick="CopyCode(this)"&gt;复制代码&lt;/span&gt; &lt;span  onmouseover="ChangeIcon(this,true)" title="关于本程序" tabindex="2" onmouseout="ChangeIcon(this,false)" onclick="AboutMe()"&gt;？&lt;/span&gt; &lt;/span&gt;这是一段程序代码。 &lt;/div&gt; &lt;div  title="源代码区域"&gt; &lt;ol &gt; &lt;li value="1"&gt;&lt;pre &gt;&lt;span style="color: green"&gt;// CLR.Dll.h&lt;/span&gt;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;span style="color: green"&gt;&lt;/span&gt;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: green"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;#pragma once&lt;/span&gt;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;#include &lt;/span&gt;&lt;span style="color: #a31515"&gt;"string.h"&lt;/span&gt;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: #a31515"&gt;&lt;/span&gt;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;span style="color: #a31515"&gt;&lt;/span&gt;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: #a31515"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using namespace &lt;/span&gt;System;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;using namespace &lt;/span&gt;System::Runtime::InteropServices;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;CLRDll {&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;public ref class &lt;/span&gt;DllClass&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;{&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;:&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;String^ FunctionTest(String^ input)&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;{&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;char&lt;/span&gt;* inputChar = ManagedString2UnmanagedStringA(input);&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: green"&gt;//call native c++ function...&lt;/span&gt;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;span style="color: green"&gt;            &lt;/span&gt;inputChar[0] = &lt;span style="color: #a31515"&gt;'A'&lt;/span&gt;;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;String^ result = UnmanagedStringA2ManagedString(inputChar);&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;result;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;}&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;private&lt;/span&gt;:&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: green"&gt;//将?非?托D管ü的?ANSI字?符?串?转a换?成é托D管ü字?符?串? &lt;/span&gt;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;span style="color: green"&gt;        &lt;/span&gt;String^ UnmanagedStringA2ManagedString(&lt;span style="color: blue"&gt;char&lt;/span&gt;* pIn)&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;{&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;Marshal::PtrToStringAnsi(&lt;span style="color: blue"&gt;static_cast&lt;/span&gt;&amp;lt;IntPtr&amp;gt;(pIn));&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;}&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: green"&gt;//将?托D管ü字?符?串?转a换?成é非?托D管ü的?ANSI字?符?串? &lt;/span&gt;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;span style="color: green"&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;char&lt;/span&gt;* ManagedString2UnmanagedStringA(String^ strIn)&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;{&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;IntPtr ip = Marshal::StringToHGlobalAnsi(strIn);&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;const char&lt;/span&gt;* pTemp = &lt;span style="color: blue"&gt;static_cast&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;const char&lt;/span&gt;*&amp;gt;(ip.ToPointer());&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;char &lt;/span&gt;*pOut = &lt;span style="color: blue"&gt;new char&lt;/span&gt;[strlen(pTemp)+1];&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;strcpy(pOut, pTemp);&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;Marshal::FreeHGlobal(ip);&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;pOut;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;} &#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;};&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;}&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.src_container{background-color:#e7e5dc; width:99%; overflow:hidden; margin:12px 0 12px 0 !important; padding:0px 3px 3px 0px}&#xD;
.src_container .titlebar{ background-color:#d4dfff;  border:1px solid #4f81bd;  border-bottom:0;  padding:3px 24px;  margin:0;  width:auto;  line-height:120%;  overflow:hidden;  text-align:left;  font-size:12px}&#xD;
.src_container .toolbar{ display:inline;  font-weight:normal;  font-size:100%;  float:right;  cursor:hand;  color:#00f;  text-align:left;  overflow:hidden}&#xD;
.toolbar span.button{ display:inline;  font-weight:normal;  font-size:100%;  cursor:hand;  color:#00f;  text-align:left;  overflow:hidden;  cursor:pointer;}&#xD;
.src_container div.clientarea{ background-color:white;  border:1px solid #4f81bd;  margin:0;  width:auto !important;  width:100%;  height:auto;  overflow:auto;  text-align:left;  font-size:12px;  font-family: "Courier New","Consolas","Fixedsys",courier,monospace,serif}&#xD;
.src_container ol.mainarea{ padding:0 0 0 52px;  margin:0;  background-color:#f7f7ff !important}&#xD;
.number_show{ padding-left:52px !important;  list-style:decimal outside !important}&#xD;
.number_show li{ list-style:decimal outside !important;  border-left:1px dotted #4f81bd}&#xD;
.number_hide{ padding-left:0px !important;  list-style-type:none !important}&#xD;
.number_hide li{ list-style-type:none !important;  border-left:0px}&#xD;
ol.mainarea li{ display:list-item !important;  font-size:12px !important;  margin:0 !important;  line-height:18px !important;  padding:0 0 0 0px !important;  background-color:#f7f7ff !important;  color:#4f81bd}&#xD;
ol.mainarea li pre{color:black; line-height:18px;  padding:0 0 0 12px !important; margin:0em;  background-color:#fff !important}&#xD;
.linewrap ol.mainarea li pre{white-space:pre-wrap; white-space:-moz-pre-wrapwhite-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word}&#xD;
ol.mainarea li pre.alt{ background-color:#f7f7ff !important}&#xD;
&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;C#&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div  title="标题"&gt;&lt;span  title="工具栏区域"&gt;&lt;span  onmouseover="ChangeIcon(this,true)" title="显示/隐藏源代码行号" tabindex="0" onmouseout="ChangeIcon(this,false)" onclick="LineNumberVisible(this)"&gt;显示行号&lt;/span&gt; &lt;span  onmouseover="ChangeIcon(this,true)" title="将源代码复制到剪贴板上" tabindex="1" onkeypress="CopyCode_CheckKey(this,true)" onmouseout="ChangeIcon(this,false)" onclick="CopyCode(this)"&gt;复制代码&lt;/span&gt; &lt;span  onmouseover="ChangeIcon(this,true)" title="关于本程序" tabindex="2" onmouseout="ChangeIcon(this,false)" onclick="AboutMe()"&gt;？&lt;/span&gt; &lt;/span&gt;这是一段程序代码。 &lt;/div&gt;&#xD;
&lt;div  title="源代码区域"&gt;&#xD;
&lt;ol &gt;&#xD;
&lt;li value="1"&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;RunTest()&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;{&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: #2b91af"&gt;DllClass &lt;/span&gt;curDllClass = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DllClass&lt;/span&gt;();&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;input = &lt;span style="color: #a31515"&gt;"test"&lt;/span&gt;;&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;output = curDllClass.FunctionTest(input);&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre&gt;}&#xD;
&lt;/pre&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;pre &gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.src_container{background-color:#e7e5dc; width:99%; overflow:hidden; margin:12px 0 12px 0 !important; padding:0px 3px 3px 0px}&#xD;
.src_container .titlebar{ background-color:#d4dfff;  border:1px solid #4f81bd;  border-bottom:0;  padding:3px 24px;  margin:0;  width:auto;  line-height:120%;  overflow:hidden;  text-align:left;  font-size:12px}&#xD;
.src_container .toolbar{ display:inline;  font-weight:normal;  font-size:100%;  float:right;  cursor:hand;  color:#00f;  text-align:left;  overflow:hidden}&#xD;
.toolbar span.button{ display:inline;  font-weight:normal;  font-size:100%;  cursor:hand;  color:#00f;  text-align:left;  overflow:hidden;  cursor:pointer;}&#xD;
.src_container div.clientarea{ background-color:white;  border:1px solid #4f81bd;  margin:0;  width:auto !important;  width:100%;  height:auto;  overflow:auto;  text-align:left;  font-size:12px;  font-family: "Courier New","Consolas","Fixedsys",courier,monospace,serif}&#xD;
.src_container ol.mainarea{ padding:0 0 0 52px;  margin:0;  background-color:#f7f7ff !important}&#xD;
.number_show{ padding-left:52px !important;  list-style:decimal outside !important}&#xD;
.number_show li{ list-style:decimal outside !important;  border-left:1px dotted #4f81bd}&#xD;
.number_hide{ padding-left:0px !important;  list-style-type:none !important}&#xD;
.number_hide li{ list-style-type:none !important;  border-left:0px}&#xD;
ol.mainarea li{ display:list-item !important;  font-size:12px !important;  margin:0 !important;  line-height:18px !important;  padding:0 0 0 0px !important;  background-color:#f7f7ff !important;  color:#4f81bd}&#xD;
ol.mainarea li pre{color:black; line-height:18px;  padding:0 0 0 12px !important; margin:0em;  background-color:#fff !important}&#xD;
.linewrap ol.mainarea li pre{white-space:pre-wrap; white-space:-moz-pre-wrapwhite-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word}&#xD;
ol.mainarea li pre.alt{ background-color:#f7f7ff !important}&#xD;
&lt;/style&gt;&#xD;
&lt;img src="http://www.cnblogs.com/sunrack/aggbug/1932841.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sunrack/archive/2011/01/11/1932841.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sunrack/archive/2010/12/29/1919474.html</id><title type="text">程序员从初级到中级10个秘诀</title><summary type="text">Justin James曾发表过一篇博文《10 tips for advancing from a beginner to an intermediate developer》，为我们分享如何才能完成程序员从初级到中级的蜕变，现将中文译文转载于此，供大家借鉴。 在一封与TechRepublic会员交流的邮件当中，他提到了面向程序员的博客、文章及杂志分成两类：面向初学者类（“hello world”...</summary><published>2010-12-29T02:25:00Z</published><updated>2010-12-29T02:25:00Z</updated><author><name>sunrack</name><uri>http://www.cnblogs.com/sunrack/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sunrack/archive/2010/12/29/1919474.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sunrack/archive/2010/12/29/1919474.html"/><content type="html">&lt;p&gt;Justin James曾发表过一篇博文《&lt;a href="http://blogs.techrepublic.com.com/10things/?p=732"&gt;10 tips for advancing from a beginner to an intermediate developer&lt;/a&gt;》，为我们分享如何才能完成程序员从初级到中级的蜕变，现将&lt;a href="http://kb.cnblogs.com/page/71136/"&gt;中文译文&lt;/a&gt;转载于此，供大家借鉴。 &lt;p&gt;在一封与TechRepublic会员交流的邮件当中，他提到了面向程序员的博客、文章及杂志分成两类：面向初学者类（“hello world”这种类型的教程）以及面向专家类（MSDN杂志）。这个观点很好，有关程序员如何从初级跃升到中级的信息极少。以下是为了实现这种转变需要你去做的10件事。 &lt;p&gt;&lt;strong&gt;1.学习另一门语言&lt;/strong&gt; &lt;p&gt;其实你学的是哪一门语言并没有关系，但是学习另一门语言（不管你已经了解多少种语言）将把你打造为更好的程序员。能学会一门与你日常使用的语言风格迥异的语言则更佳。打个比方，如果你是C#程序员，学习VB.NET或者Java对你的帮助就没有学习Ruby或者Groovy大。 &lt;p&gt;我说“学另一门语言”的意思是要真正学会它。学习一门语言包括三个领域的知识：语法、内置操作符和库，以及“如何使用”。前面两个简单；我认为一名有经验的程序员，根据语言的不同，能在半小时到几小时内掌握足以维护代码的语法知识。操作符和库只不过是知识逐步积累的过程，你什么时候想清楚要了解什么了，再去查阅参考材料也不迟。只有第三项，“如何使用它”-要花上你几个月的时间去跟这门语言打交道，真正的奇迹就在此发生。我建议用这门语言的风格去做一个适合该语言的项目。 &lt;p&gt;真正学会了另一门语言之后，我敢保证你的程序员水平一定会突飞猛进。 &lt;p&gt;&lt;strong&gt;2.学习先进的搜索技术、手段和及策略&lt;/strong&gt; &lt;p&gt;作为一名好的程序员，不仅仅是技能的问题了，而是你寻找信息的技巧，这个趋势越来越明显。对大部分人而言，仅仅输入“现代语言及开发框架”，这都是泛泛之谈，记不住多少的。因此，你完成工作的能力通常取决于你的检索能力。不幸的是，了解到如何找到准确而高质量的信息可不仅仅是跑到TechRepublic来找答案，或者在你选好的搜索引擎上敲几个字那么简单。 &lt;p&gt;“技术（Techniques）”、“手段（tactics）”和“策略（strategies）”看起来是一回事，实际上并非如此。你需要学会的技术是掌握你喜爱的搜索引擎的高级搜索系统；你需要了解诸如布尔操作符，如何过滤结果（像“非”关键字，域限制等等），关键字的词序扮演什么角色，等等。一句话，RTFM（Read The Fucking Manual，读那些他妈的手册）吧。 &lt;p&gt;你应该学会这些手段，诸如如何接近特定的搜索，以及了解自己实际上想查些什么。查错误很容易—只需查出错代码即可—但是许多搜索的关键字选择要困难得多。 &lt;p&gt;至于策略，你需要学会的东西，包括像应该使用哪种搜索引擎（提示：普通的搜索引擎不一定就是最佳选择），使用普通搜索引擎前应该访问哪个网站，甚至是应该到哪个论坛去寻求帮助，等等。 &lt;p&gt;&lt;strong&gt;3.帮助别人&lt;/strong&gt; &lt;p&gt;教别人始终是学习一切东西的最好方法之一。相对而言，由于你在开发领域还是个新手，认为自己没什么可教给人家的，这可以理解。但这毫无意义。记住，你所学到的一切都是你从别人或别处学到的；因此请尝试一下，成为另外一个人要请教的“别人”。每天尽量花一点时间试着回答TechRepublic上的问题，其他网站的亦可。读读其他会员的回答，你也可以学到很多东西。 &lt;p&gt;&lt;strong&gt;4.有耐心，常练习&lt;/strong&gt; &lt;p&gt;研究表明，要成为一名“专家”，需要花费10年，或者10000到20000小时的刻意练习时间。真的很久。还有，成为专家不尽然就是执行10年同样的任务；通常这意味着要在特定领域内执行广泛的任务。需要花费大量的时间和精力才能成为“专家”；做几年程序员是不够的。想在30岁左右成为一名高级软件开发工程师？要么尽早接受教育/培训，要么你得愿意在闲暇时间进行大量的工作、阅读和练习。我从高中开始编程，还牺牲了许多休息时间去跟踪行业发展、学习新技能等等。结果，我获得中级和高级程序员的时间就比我的大部分同事都要早得多，随着时间的推移，这些就转化成为很多的金钱。 &lt;p&gt;&lt;strong&gt;5.对教条拒之门外&lt;/strong&gt; &lt;p&gt;是时候开诚布公了：也许初级程序员了解的东西还不足以说出做某件事情有一种最好的方式。尊重朋友或者权威的观点是好的，但直到你更有经验之前，不要把他们的观点说成是你自己的。很简单，如果你所了解的不足以让你独立地找出这些东西来，你又怎么会认为你知道哪一位“专家”是对的呢？话是难听了点，不过请相信我；由于受某些愚蠢建议的蛊惑，或者追随某些根本不知道自己在说些什么的所谓专家，白白把自己的职业生涯耽搁了几年，这样毛头小伙程序员，我见过多了。这一点有一个很好的例子，就是面向对象结构的滥用。比如说，许多初级者读了一些有关面向对象的信息后，突然间，他们那简单的应用程序的类图看起来就像埃菲尔铁塔一样了。 &lt;p&gt;&lt;strong&gt;6.深入学习一点先进理念&lt;/strong&gt; &lt;p&gt;成为一名中级程序员，很大一部分是要在代码里面体现出一些所擅长的概念。就我而言，是多线程/并行性，是正则表达式，以及如何对动态语言进行变化（后两个在我离Perl渐行渐远后开始退化）。这是如何发生的？多线程和并行处理是因为我读了相关文章，觉得它看起来很有趣，然后再自己把它弄清楚了；然后我就一直使用这些技术来写应用。我做过一件工作，是用Perl写的，里面运用了大量的正则表达式。我也用一个过程引擎模板和内置数据库系统写过我自己的电子商务引擎；那时我几乎花了2年时间在这上面。 &lt;p&gt;找到真正令你着迷的东西。也许是图像处理，也许是数据库设计，等等。即便你是一个入门级的程序员，也要尝试一下成为某一自己所关注领域的专家。这会让你相当快速地进入到中级水平，一旦你到了那个水平，你的专家之路也走到一半了。 &lt;p&gt;&lt;strong&gt;7.学习你的领域里面的基本理论&lt;/strong&gt; &lt;p&gt;写出“Hello World”，跟理解那些字是如何显示到屏幕上的是两码事。通过学习支撑你所从事的工作的“基础/底层工作（groundwork）”，你会变得更加在行。为什么？因为你会理解事物为何会以这种方式运作，当东西坏了就能知道是哪里的问题，等等。通过掌握工作的底层机制，你变会得更出色。 &lt;p&gt;如果你是Web程序员，读读HTTP RFC和HTML规范。如果你使用代码生成器，好好看看它生成的代码；如果你使用数据库工具，看看它生成的底层SQL语句，不一而足。 &lt;p&gt;&lt;strong&gt;8.看看高级程序员的代码&lt;/strong&gt; &lt;p&gt;在工作中看看高级程序员写的代码，然后问一问事情是如何以某种特别的方式完成的，为什么？可能的话看看开源的项目。甚至即使其他程序员没有最好的编程习惯，你也会学到许多编程经验。当然，要小心别学到坏习惯。我的意思是说不要生搬硬套人家的东西；你要能领会到哪些是能行的通的，哪些是有道理的，然后再模仿人家。 &lt;p&gt;&lt;strong&gt;9.学习好的习惯&lt;/strong&gt; &lt;p&gt;愚蠢的变量名，糟糕的缩进习惯以及其他一些凌乱的迹象就是一个没有经验的程序员的最好标记。一个程序员在学会如何编程时，却经常没有被传授到那些不那么有趣的细节，像代码格式编排。甚至尽管学习这些东西并不会令你的代码更好，也不会令你成为更好的程序员，它也会确保你不被同事视为入门级的程序员。甚至即使某人是高级程序员，如果他的变量是以他那97只猫的名字来命名，或者其函数叫做“doSomething（）”的，他们看起来也不像是知道自己在干什么的人。而且会令其代码在过程中更难以维护。 &lt;p&gt;&lt;strong&gt;10.要玩的开心&lt;/strong&gt; &lt;p&gt;想要痴迷于单调乏味的工作？痛恨工作吧。要想升级为中级程序员可不仅仅是为了拿到不断增长的工资不达目的誓不罢休，而是要真正享受工作。如果你不喜欢自己的工作，且还是初级程序员，你怎么会认为成为中级或高级程序员情况就会有所好转呢？换工作或改职业吧。反过来说，如果你喜爱所从事的工作，那就好！只要你坚持下去，我保证你能成为一名更好的程序员。（Justin James） &lt;p&gt;【人物小传】 &lt;p&gt;&lt;strong&gt;Justin James&lt;/strong&gt; &lt;p&gt;&lt;img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/100820/28_100820094205_1.png" width="45" height="60"&gt; &lt;p&gt;Justin James &lt;p&gt;Justin James就职于Levit &amp;amp; James, Inc，并在公司中承担着混合编程、网络管理员、系统管理员多项职务。自2005年就在TechRepublic开博，博客地址：&lt;a href="http://blogs.techrepublic.com.com/10things/"&gt;http://blogs.techrepublic.com.com/10things/&lt;/a&gt;。 &lt;p&gt;原文链接：&lt;a href="http://blogs.techrepublic.com.com/10things/?p=732"&gt;http://blogs.techrepublic.com.com/10things/?p=732&lt;/a&gt; &lt;p&gt;译文链接：&lt;a href="http://kb.cnblogs.com/page/71136/"&gt;http://kb.cnblogs.com/page/71136/&lt;/a&gt;&lt;img src="http://www.cnblogs.com/sunrack/aggbug/1919474.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sunrack/archive/2010/12/29/1919474.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sunrack/archive/2010/12/10/1901834.html</id><title type="text">Get JavaScript IntelliSense With DevExpress Client-Side Objects - v2010 vol 1</title><summary type="text">http://community.devexpress.com/blogs/aspnet/archive/2010/04/20/how-to-get-devexpress-javascript-intellisense.aspx  Add IntelliSense Support Follow these 3 easy steps to add IntelliSense support to yo...</summary><published>2010-12-10T01:44:00Z</published><updated>2010-12-10T01:44:00Z</updated><author><name>sunrack</name><uri>http://www.cnblogs.com/sunrack/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sunrack/archive/2010/12/10/1901834.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sunrack/archive/2010/12/10/1901834.html"/><content type="html">&lt;p&gt;&lt;a title="http://community.devexpress.com/blogs/aspnet/archive/2010/04/20/how-to-get-devexpress-javascript-intellisense.aspx" href="http://community.devexpress.com/blogs/aspnet/archive/2010/04/20/how-to-get-devexpress-javascript-intellisense.aspx"&gt;http://community.devexpress.com/blogs/aspnet/archive/2010/04/20/how-to-get-devexpress-javascript-intellisense.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Add IntelliSense Support&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Follow these 3 easy steps to add IntelliSense support to your project: &lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Install the latest DXperience v2010.1 release. (Currently, the DXperience v2010.1 beta is available to DXperience subscription license holders). &lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Click the ‘Add Existing Item’ in your project menu. Then add the &lt;strong&gt;ASPxScriptIntelliSense.js&lt;/strong&gt; file to your project which should be located in the following folder: &lt;p&gt;&lt;strong&gt;%DevExpress Install Folder %\DevExpress2010.1\Components\Sources\DevExpress.Web.ASPxScriptIntellisense\ASPxScriptIntelliSense.js&lt;/strong&gt; &lt;p&gt;For example, on my local machine the ASPxScriptIntelliSense.js file is located here: &lt;p&gt;&lt;strong&gt;C:\Program Files\DevExpress 2010.1\Components\Sources\DevExpress.Web.ASPxScriptIntellisense\ASPxScriptIntellisense.js&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Type the following code in the page &amp;lt;body&amp;gt; section in the page that you want to enable JavaScript IntelliSense: &lt;p&gt;&lt;a href="http://community.devexpress.com/#"&gt;view plain&lt;/a&gt; | &lt;a href="http://community.devexpress.com/#"&gt;print&lt;/a&gt; | &lt;a href="http://community.devexpress.com/#"&gt;copy to clipboard&lt;/a&gt; &lt;p&gt;1&lt;br&gt;&amp;lt;% if (DesignMode){ %&amp;gt;&amp;nbsp;&amp;nbsp; &lt;p&gt;2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script src="../ASPxScriptIntelliSense.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&amp;nbsp;&amp;nbsp; &lt;p&gt;3&lt;br&gt;&amp;lt;% } %&amp;gt;&amp;nbsp; &lt;pre&gt;&amp;lt;% if (DesignMode){ %&amp;gt;&#xD;
    &amp;lt;script src="../ASPxScriptIntelliSense.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&#xD;
&amp;lt;% } %&amp;gt;&amp;nbsp; &lt;/pre&gt;&#xD;
&lt;p&gt;Note: It's important to check the “if(DesignMode)” statement because it helps to avoid additional round trips to the server for the ASPxScriptIntelliSense.js file. It also helps to prevent mixing up the IntelliSense schema classes and production scripts classes.&#xD;
&lt;p&gt;That's it - you now have full IntelliSense support for DevExpress client controls in BLOCKED SCRIPT&#xD;
&lt;p&gt;&lt;img title="asp-intelllisense-popup" border="0" alt="asp-intelllisense-popup" src="http://community.devexpress.com/blogs/aspnet/aspintelllisensepopup_54C8B548.png" width="648" height="290"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;New Cast Methods&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;We’ve also added special static Cast methods which enable you to cast the DevExpress control's client object and then get the client object’s properties, methods and events via IntelliSense. &#xD;
&lt;p&gt;(e.g. ASPxClientButton.Cast(obj), ASPxClientTreeList.Cast(obj), etc.). You can use these methods with event arguments:&#xD;
&lt;p&gt;&lt;a href="http://community.devexpress.com/#"&gt;view plain&lt;/a&gt; | &lt;a href="http://community.devexpress.com/#"&gt;print&lt;/a&gt; | &lt;a href="http://community.devexpress.com/#"&gt;copy to clipboard&lt;/a&gt;&#xD;
&lt;p&gt;1&lt;br&gt;&amp;lt;script type="text/javascript"&amp;gt;&amp;nbsp;&amp;nbsp; &lt;p&gt;2&lt;br&gt;function OnGridRowDblClick(s, e) {&amp;nbsp;&amp;nbsp; &lt;p&gt;3&lt;br&gt;var gridInstance = ASPxClientGridView.Cast(s);&amp;nbsp;&amp;nbsp; &lt;p&gt;4&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gridInstance.StartEditRow(gridInstance.GetFocusedRowIndex());&amp;nbsp;&amp;nbsp; &lt;p&gt;5&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;p&gt;6&lt;br&gt;&amp;lt;/script&amp;gt; &lt;pre&gt;&amp;lt;script type="text/javascript"&amp;gt;&#xD;
    function OnGridRowDblClick(s, e) {&#xD;
        var gridInstance = ASPxClientGridView.Cast(s);&#xD;
        gridInstance.StartEditRow(gridInstance.GetFocusedRowIndex());&#xD;
    }&#xD;
&amp;lt;/script&amp;gt;&lt;/pre&gt;&#xD;
&lt;p&gt;These new cast methods also accept the ClientInstanceName of the client object. Therefore, to get a client object with IntelliSense support, simply pass the ClientInstanceName as a string to the Cast method:&#xD;
&lt;p&gt;&lt;a href="http://community.devexpress.com/#"&gt;view plain&lt;/a&gt; | &lt;a href="http://community.devexpress.com/#"&gt;print&lt;/a&gt; | &lt;a href="http://community.devexpress.com/#"&gt;copy to clipboard&lt;/a&gt;&#xD;
&lt;p&gt;1&lt;br&gt;&amp;lt;form id="form1" runat="server"&amp;gt;&amp;nbsp;&amp;nbsp; &lt;p&gt;2&lt;br&gt;&amp;lt;script type="text/javascript"&amp;gt;&amp;nbsp;&amp;nbsp; &lt;p&gt;3&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function OnGridRowClick(s, e) {&amp;nbsp;&amp;nbsp; &lt;p&gt;4&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var gridInstance = ASPxClientGridView.Cast("grid");&amp;nbsp;&amp;nbsp; &lt;p&gt;5&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;p&gt;6&lt;br&gt;&amp;lt;/script&amp;gt;&#xD;
&lt;p&gt;7&lt;br&gt;&amp;lt;div&amp;gt;&#xD;
&lt;p&gt;8&lt;br&gt;&amp;lt;dx:ASPxGridView ID="ASPxGridView1" runat="server" ClientInstanceName="grid"&amp;gt;&amp;nbsp;&amp;nbsp; &lt;p&gt;9&lt;br&gt;&amp;lt;ClientSideEvents Init="OnGridRowClick" /&amp;gt;&#xD;
&lt;p&gt;10&lt;br&gt;&amp;lt;/dx:ASPxGridView&amp;gt;&#xD;
&lt;p&gt;11&lt;br&gt;&amp;lt;/div&amp;gt;&#xD;
&lt;p&gt;12&lt;br&gt;&amp;lt;/form&amp;gt;&lt;pre&gt;&amp;lt;form id="form1" runat="server"&amp;gt;&#xD;
    &amp;lt;script type="text/javascript"&amp;gt;&#xD;
        function OnGridRowClick(s, e) {&#xD;
            var gridInstance = ASPxClientGridView.Cast("grid");&#xD;
        }&#xD;
    &amp;lt;/script&amp;gt;&#xD;
    &amp;lt;div&amp;gt;&#xD;
        &amp;lt;dx:ASPxGridView ID="ASPxGridView1" runat="server" ClientInstanceName="grid"&amp;gt;&#xD;
            &amp;lt;ClientSideEvents Init="OnGridRowClick" /&amp;gt;&#xD;
        &amp;lt;/dx:ASPxGridView&amp;gt;&#xD;
    &amp;lt;/div&amp;gt;&#xD;
&amp;lt;/form&amp;gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Cast Sender Object&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;You also get JavaScript IntelliSense for the gridInstance variable. For example, this method shows how you can cast the sender object and get JavaScript IntelliSense:&#xD;
&lt;p&gt;Fig.1:&#xD;
&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/aspnet/dc6fqjjf_92dd7536cq_b_0CEBBA8A.png"&gt;&lt;img title="dc6fqjjf_92dd7536cq_b" border="0" alt="dc6fqjjf_92dd7536cq_b" src="http://community.devexpress.com/blogs/aspnet/dc6fqjjf_92dd7536cq_b_thumb_00E9CA56.png" width="634" height="356"&gt;&lt;/a&gt;&#xD;
&lt;p&gt;Fig.2:&#xD;
&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/aspnet/dc6fqjjf_93rsd6q9cz_b_70DD8C4F.png"&gt;&lt;img title="dc6fqjjf_93rsd6q9cz_b" border="0" alt="dc6fqjjf_93rsd6q9cz_b" src="http://community.devexpress.com/blogs/aspnet/dc6fqjjf_93rsd6q9cz_b_thumb_209B34CF.png" width="669" height="273"&gt;&lt;/a&gt;&#xD;
&lt;p&gt;Fig.3:&#xD;
&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/aspnet/dc6fqjjf_94dw78vbgg_b_2D9514E0.png"&gt;&lt;img title="dc6fqjjf_94dw78vbgg_b" border="0" alt="dc6fqjjf_94dw78vbgg_b" src="http://community.devexpress.com/blogs/aspnet/dc6fqjjf_94dw78vbgg_b_thumb_0B401018.png" width="669" height="335"&gt;&lt;/a&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Standalone JavaScript File Support &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;If you want to enable IntelliSense for our controls in a standalone JavaScript file then simply add a reference to our ASPxScriptIntelliSense file at the top:&#xD;
&lt;p&gt;&lt;img title="asp-intelllisense-individual" border="0" alt="asp-intelllisense-individual" src="http://community.devexpress.com/blogs/aspnet/aspintelllisenseindividual_4213BB91.png" width="464" height="217"&gt;&#xD;
&lt;p&gt;Please note that this feature is only available in Visual Studio 2008 and 2010.&#xD;
&lt;img src="http://www.cnblogs.com/sunrack/aggbug/1901834.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sunrack/archive/2010/12/10/1901834.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sunrack/archive/2010/12/09/1901422.html</id><title type="text">Grid Editing - Cascading Combo Boxes</title><summary type="text">&amp;lt;%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="CascadingComboBoxes.aspx.cs"Inherits="GridEditing_CascadingComboBoxes" %&amp;gt;&amp;lt;asp:Content ID="Content1" ContentPlaceH...</summary><published>2010-12-09T08:31:00Z</published><updated>2010-12-09T08:31:00Z</updated><author><name>sunrack</name><uri>http://www.cnblogs.com/sunrack/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sunrack/archive/2010/12/09/1901422.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sunrack/archive/2010/12/09/1901422.html"/><content type="html">&lt;p&gt;&amp;lt;%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="CascadingComboBoxes.aspx.cs"&lt;br&gt;Inherits="GridEditing_CascadingComboBoxes" %&amp;gt;&lt;br&gt;&amp;lt;asp:Content ID="Content1" ContentPlaceHolderID="ContentHolder" runat="Server"&amp;gt;&lt;br&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br&gt;// &amp;lt;![CDATA[&lt;br&gt;function OnCountryChanged(cmbCountry) {&lt;br&gt;grid.GetEditor("City").PerformCallback(cmbCountry.GetValue().toString());&lt;br&gt;}&lt;br&gt;// ]]&amp;gt;&lt;br&gt;&amp;lt;/script&amp;gt;&lt;br&gt;&amp;lt;dx:ASPxGridView ID="grid" ClientInstanceName="grid" runat="server" DataSourceID="AccessDataSourceMain"&lt;br&gt;KeyFieldName="CustomerID" Width="100%" AutoGenerateColumns="False" OnCellEditorInitialize="grid_CellEditorInitialize"&amp;gt;&lt;br&gt;&amp;lt;Settings ShowGroupPanel="True" /&amp;gt;&lt;br&gt;&amp;lt;SettingsEditing Mode="Inline" /&amp;gt;&lt;br&gt;&amp;lt;Columns&amp;gt;&lt;br&gt;&amp;lt;dx:GridViewCommandColumn VisibleIndex="0"&amp;gt;&lt;br&gt;&amp;lt;EditButton Visible="True"&amp;gt;&lt;br&gt;&amp;lt;/EditButton&amp;gt;&lt;br&gt;&amp;lt;/dx:GridViewCommandColumn&amp;gt;&lt;br&gt;&amp;lt;dx:GridViewDataComboBoxColumn FieldName="Country" VisibleIndex="1"&amp;gt;&lt;br&gt;&amp;lt;PropertiesComboBox TextField="Country" ValueField="Country" EnableSynchronization="False"&lt;br&gt;IncrementalFilteringMode="StartsWith" DataSourceID="AccessDataSourceCountry"&amp;gt;&lt;br&gt;&amp;lt;ClientSideEvents SelectedIndexChanged="function(s, e) { OnCountryChanged(s); }"&amp;gt;&amp;lt;/ClientSideEvents&amp;gt;&lt;br&gt;&amp;lt;/PropertiesComboBox&amp;gt;&lt;br&gt;&amp;lt;/dx:GridViewDataComboBoxColumn&amp;gt;&lt;br&gt;&amp;lt;dx:GridViewDataComboBoxColumn FieldName="City" VisibleIndex="2"&amp;gt;&lt;br&gt;&amp;lt;PropertiesComboBox EnableSynchronization="False" IncrementalFilteringMode="StartsWith"&lt;br&gt;DropDownStyle="DropDown"&amp;gt;&lt;br&gt;&amp;lt;/PropertiesComboBox&amp;gt;&lt;br&gt;&amp;lt;/dx:GridViewDataComboBoxColumn&amp;gt;&lt;br&gt;&amp;lt;dx:GridViewDataColumn VisibleIndex="3" FieldName="ContactName"&amp;gt;&lt;br&gt;&amp;lt;/dx:GridViewDataColumn&amp;gt;&lt;br&gt;&amp;lt;dx:GridViewDataColumn VisibleIndex="4" FieldName="CompanyName"&amp;gt;&lt;br&gt;&amp;lt;/dx:GridViewDataColumn&amp;gt;&lt;br&gt;&amp;lt;/Columns&amp;gt;&lt;br&gt;&amp;lt;/dx:ASPxGridView&amp;gt;&lt;br&gt;&amp;lt;asp:AccessDataSource ID="AccessDataSourceMain" runat="server" DataFile="~/App_Data/nwind.mdb"&lt;br&gt;OnDeleting="AccessDataSource1_Modifying" OnInserting="AccessDataSource1_Modifying"&lt;br&gt;OnUpdating="AccessDataSource1_Modifying" SelectCommand="SELECT * FROM [Customers]"&lt;br&gt;DeleteCommand="DELETE FROM [Customers] WHERE [CustomerID] = ?" InsertCommand="INSERT INTO [Customers] ([CustomerID], [CompanyName], [ContactName], [ContactTitle], [Address], [City], [Region], [PostalCode], [Country], [Phone], [Fax]) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"&lt;br&gt;UpdateCommand="UPDATE [Customers] SET [CompanyName] = ?, [ContactName] = ?, [City] = ?, [Country] = ? WHERE [CustomerID] = ?"&amp;gt;&lt;br&gt;&amp;lt;DeleteParameters&amp;gt;&lt;br&gt;&amp;lt;asp:Parameter Name="CustomerID" Type="String" /&amp;gt;&lt;br&gt;&amp;lt;/DeleteParameters&amp;gt;&lt;br&gt;&amp;lt;UpdateParameters&amp;gt;&lt;br&gt;&amp;lt;asp:Parameter Name="CompanyName" Type="String" /&amp;gt;&lt;br&gt;&amp;lt;asp:Parameter Name="ContactName" Type="String" /&amp;gt;&lt;br&gt;&amp;lt;asp:Parameter Name="City" Type="String" /&amp;gt;&lt;br&gt;&amp;lt;asp:Parameter Name="Country" Type="String" /&amp;gt;&lt;br&gt;&amp;lt;/UpdateParameters&amp;gt;&lt;br&gt;&amp;lt;/asp:AccessDataSource&amp;gt;&lt;br&gt;&amp;lt;asp:AccessDataSource ID="AccessDataSourceCountry" runat="server" DataFile="~/App_Data/WorldCities.mdb"&lt;br&gt;SelectCommand="SELECT * FROM [Countries]"&amp;gt;&amp;lt;/asp:AccessDataSource&amp;gt;&lt;br&gt;&amp;lt;asp:AccessDataSource ID="AccessDataSourceCities" runat="server" DataFile="~/App_Data/WorldCities.mdb"&lt;br&gt;SelectCommand="SELECT c.City FROM [Cities] c, [Countries] cr WHERE (c.CountryId = cr.CountryId) AND (cr.Country = ?) order by c.City"&amp;gt;&lt;br&gt;&amp;lt;SelectParameters&amp;gt;&lt;br&gt;&amp;lt;asp:Parameter Name="?" /&amp;gt;&lt;br&gt;&amp;lt;/SelectParameters&amp;gt;&lt;br&gt;&amp;lt;/asp:AccessDataSource&amp;gt;&lt;br&gt;&amp;lt;/asp:Content&amp;gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;using System;&lt;br&gt;using System.Data;&lt;br&gt;using System.Configuration;&lt;br&gt;using System.Collections;&lt;br&gt;using System.Collections.Generic;&lt;br&gt;using System.Web;&lt;br&gt;using System.Web.Security;&lt;br&gt;using System.Web.UI;&lt;br&gt;using System.Web.UI.WebControls;&lt;br&gt;using System.Web.UI.WebControls.WebParts;&lt;br&gt;using System.Web.UI.HtmlControls;&lt;br&gt;using DevExpress.Web.ASPxCallbackPanel;&lt;br&gt;using DevExpress.Web.ASPxGridView;&lt;br&gt;using DevExpress.Web.ASPxEditors;&lt;br&gt;using DevExpress.Web.ASPxClasses;&lt;br&gt;using DevExpress.Web.Demos;&lt;br&gt;public partial class GridEditing_CascadingComboBoxes : Page {&lt;br&gt;protected void Page_Load(object sender, EventArgs e) {&lt;br&gt;if(!IsPostBack) {&lt;br&gt;grid.StartEdit(3);&lt;br&gt;}&lt;br&gt;}&lt;br&gt;protected void grid_CellEditorInitialize(object sender, ASPxGridViewEditorEventArgs e) {&lt;br&gt;if(!grid.IsEditing || e.Column.FieldName != "City") return;&lt;br&gt;if(e.KeyValue == DBNull.Value || e.KeyValue == null) return;&lt;br&gt;object val = grid.GetRowValuesByKeyValue(e.KeyValue, "Country");&lt;br&gt;if(val == DBNull.Value) return;&lt;br&gt;string country = (string)val;&lt;br&gt;ASPxComboBox combo = e.Editor as ASPxComboBox;&lt;br&gt;FillCityCombo(combo, country);&lt;br&gt;combo.Callback += new CallbackEventHandlerBase(cmbCity_OnCallback);&lt;br&gt;}&lt;br&gt;protected void FillCityCombo(ASPxComboBox cmb, string country) {&lt;br&gt;if (string.IsNullOrEmpty(country)) return;&lt;br&gt;List&amp;lt;string&amp;gt; cities = GetCities(country);&lt;br&gt;cmb.Items.Clear();&lt;br&gt;foreach (string city in cities)&lt;br&gt;cmb.Items.Add(city);&lt;br&gt;}&lt;br&gt;List&amp;lt;string&amp;gt; GetCities(string country) {&lt;br&gt;List&amp;lt;string&amp;gt; list = new List&amp;lt;string&amp;gt;();&lt;br&gt;AccessDataSourceCities.SelectParameters[0].DefaultValue = country;&lt;br&gt;DataView view = (DataView)AccessDataSourceCities.Select(DataSourceSelectArguments.Empty);&lt;br&gt;for(int i = 0; i &amp;lt; view.Count; i++) {&lt;br&gt;list.Add((string)view[i][0]);&lt;br&gt;}&lt;br&gt;return list;&lt;br&gt;}&lt;br&gt;protected void AccessDataSource1_Modifying(object sender, SqlDataSourceCommandEventArgs e) {&lt;br&gt;Utils.AssertNotReadOnly();&lt;br&gt;}&lt;br&gt;void cmbCity_OnCallback(object source, CallbackEventArgsBase e) {&lt;br&gt;FillCityCombo(source as ASPxComboBox, e.Parameter);&lt;br&gt;}&lt;br&gt;} &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="http://demos.devexpress.com/ASPxGridViewDemos/GridEditing/CascadingComboBoxes.aspx" href="http://demos.devexpress.com/ASPxGridViewDemos/GridEditing/CascadingComboBoxes.aspx"&gt;http://demos.devexpress.com/ASPxGridViewDemos/GridEditing/CascadingComboBoxes.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sunrack/aggbug/1901422.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sunrack/archive/2010/12/09/1901422.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sunrack/archive/2010/12/08/1900326.html</id><title type="text">ASPxRadioButtonList 报错解决办法</title><summary type="text">ASPxGridView EditForm ASPxRadioButtonList 报错解决办法 是因为没有指定 ValueType &amp;lt;dx:ASPxRadioButtonList ID="ASPxRadioButtonListObjectType" runat="server" RepeatDirection="Horizontal" ValueType="System.Int32" Value...</summary><published>2010-12-08T08:00:00Z</published><updated>2010-12-08T08:00:00Z</updated><author><name>sunrack</name><uri>http://www.cnblogs.com/sunrack/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sunrack/archive/2010/12/08/1900326.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sunrack/archive/2010/12/08/1900326.html"/><content type="html">&lt;p&gt;ASPxGridView EditForm ASPxRadioButtonList 报错解决办法&lt;/p&gt; &lt;p&gt;是因为没有指定 ValueType&lt;/p&gt; &lt;p&gt;&amp;lt;dx:ASPxRadioButtonList ID="ASPxRadioButtonListObjectType" runat="server" RepeatDirection="Horizontal"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;ValueType="System.Int32"&lt;/font&gt; Value='&amp;lt;%# Bind("ObjectType") %&amp;gt;'&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Items&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dx:ListEditItem Value="0" Text="全部" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dx:ListEditItem Value="1" Text="学员" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dx:ListEditItem Value="2" Text="教职工" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Items&amp;gt;&lt;br&gt;&amp;lt;/dx:ASPxRadioButtonList&amp;gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sunrack/aggbug/1900326.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sunrack/archive/2010/12/08/1900326.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sunrack/archive/2010/12/01/1892678.html</id><title type="text">本地连接属性&amp;ldquo;出现意外错误&amp;rdquo;的解决办法</title><summary type="text">右击"本地连接"却出现"出现意外错误"的问题,,原因可能是注册表被损坏导致无法查看网络连接的属性,重新注册一下即可.解决方法如下: 在运行中分别输入: regsvr32 netshell.dll regsvr32 ole32.dll</summary><published>2010-12-01T01:28:00Z</published><updated>2010-12-01T01:28:00Z</updated><author><name>sunrack</name><uri>http://www.cnblogs.com/sunrack/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sunrack/archive/2010/12/01/1892678.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sunrack/archive/2010/12/01/1892678.html"/><content type="html">&lt;p&gt;右击"本地连接"却出现"出现意外错误"的问题,,原因可能是&lt;u&gt;&lt;strong&gt;注册表被损坏&lt;/strong&gt;&lt;/u&gt;导致无法查看网络连接的属性,重新注册一下即可.解决方法如下: &lt;p&gt;在运行中分别输入: &lt;p&gt;regsvr32 netshell.dll &lt;p&gt;regsvr32 ole32.dll&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sunrack/aggbug/1892678.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sunrack/archive/2010/12/01/1892678.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sunrack/archive/2010/11/29/1890911.html</id><title type="text">Bootstrap DotNetFX35SP1 in Visual Studio 2010</title><summary type="text">Update the Package Data  Open the [Program Files]Microsoft SDKsWindowsv6.0ABootstrapperPackagesDotNetFx35SP1 folder or %ProgramFiles(x86)%Microsoft SDKsWindowsv6.0ABootstrapperPackagesDotNetFx35SP1 on...</summary><published>2010-11-29T03:46:00Z</published><updated>2010-11-29T03:46:00Z</updated><author><name>sunrack</name><uri>http://www.cnblogs.com/sunrack/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sunrack/archive/2010/11/29/1890911.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sunrack/archive/2010/11/29/1890911.html"/><content type="html">&lt;p&gt;Update the Package Data &lt;ol&gt; &lt;li&gt;Open the [Program Files]Microsoft SDKsWindowsv6.0ABootstrapperPackagesDotNetFx35SP1 folder or %ProgramFiles(x86)%Microsoft SDKsWindowsv6.0ABootstrapperPackagesDotNetFx35SP1 on x64 operating systems  &lt;li&gt;Edit the Product.xml file &lt;li&gt;Find the element for &amp;lt; PackageFile Name="dotNetFX30XPSEPSC-x86-en-US.exe" and change the PublicKey value to: 3082010A0282010100A2DB0A8DCFC2C1499BCDAA3A34AD23596BDB6CBE2122B794C8EAAEBFC6D526C232118BBCDA5D2CFB36561E152BAE8F0DDD14A36E284C7F163F41AC8D40B146880DD98194AD9706D05744765CEAF1FC0EE27F74A333CB74E5EFE361A17E03B745FFD53E12D5B0CA5E0DD07BF2B7130DFC606A2885758CB7ADBC85E817B490BEF516B6625DED11DF3AEE215B8BAF8073C345E3958977609BE7AD77C1378D33142F13DB62C9AE1AA94F9867ADD420393071E08D6746E2C61CF40D5074412FE805246A216B49B092C4B239C742A56D5C184AAB8FD78E833E780A47D8A4B28423C3E2F27B66B14A74BD26414B9C6114604E30C882F3D00B707CEE554D77D2085576810203010001 &lt;li&gt;Find the element for &amp;lt; PackageFile Name="dotNetFX30XPSEPSC-amd64-en-US.exe" and change the PublicKey value to the same as in step 4 above &lt;li&gt;Save the product.xml file&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Download and Extract the Core Installation Files &lt;ol&gt; &lt;li&gt;Navigate to the following URL: http://go.microsoft.com/fwlink?LinkID=118080 &lt;li&gt;Download the dotNetFx35.exe file to your local disk. &lt;li&gt;Open a Command Prompt window and change to the directory to which you downloaded dotNetFx35.exe. &lt;li&gt;At the command prompt, type: &lt;br&gt;dotNetFx35.exe /x:.&lt;br&gt;This will extract the Framework files to a folder named â€œWCUâ€ in the current directory.  &lt;li&gt;Copy the contents of the WCUdotNetFramework folder and paste them in the %Program Files%Microsoft SDKsWindowsv6.0ABootstrapperPackagesDotNetFx35SP1 folder (%ProgramFiles(x86)%Microsoft SDKsWindowsv6.0ABootstrapperPackagesDotNetFx35SP1 on x64 operating systems). Note: Do not copy the WCUdotNetFramework folder itself. There should be 5 folders under the WCU folder, and each of these should now appear in the DotNetFx35SP1 folder. The folder structure should resemble the following:&lt;br&gt;o DotNetFx35SP1 (folder)  &lt;ul&gt; &lt;li&gt;dotNetFX20 (folder  &lt;li&gt;dotNetFX30 (folder) &lt;li&gt;dotNetFX35 (folder) &lt;li&gt;dotNetMSP (folder) &lt;li&gt;TOOLS folder) &lt;li&gt;en (or some other localized folder) &lt;li&gt;dotNetFx35setup.exe (file)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://www.cnblogs.com/sunrack/aggbug/1890911.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sunrack/archive/2010/11/29/1890911.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sunrack/archive/2010/11/22/1884331.html</id><title type="text">Windows Server 2008 共享策略</title><summary type="text">一、确保本地安全策略中允许网路访问中已经添加了 EveryOne 二、右键共享文件，添加必要的用户，可以设置为读写模式 三、高级共享中删除EveryOne,然后添加相应的用户，可以在这里控制更细的权限 四、子文件根据权限显示，设置子文件夹的安全设置，取消继承，删除EveryOne，添加必要的用户即可</summary><published>2010-11-22T06:21:00Z</published><updated>2010-11-22T06:21:00Z</updated><author><name>sunrack</name><uri>http://www.cnblogs.com/sunrack/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sunrack/archive/2010/11/22/1884331.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sunrack/archive/2010/11/22/1884331.html"/><content type="html">&lt;p&gt;一、确保本地安全策略中允许网路访问中已经添加了 EveryOne&lt;/p&gt; &lt;p&gt;二、右键共享文件，添加必要的用户，可以设置为读写模式&lt;/p&gt; &lt;p&gt;三、高级共享中删除EveryOne,然后添加相应的用户，可以在这里控制更细的权限&lt;/p&gt; &lt;p&gt;四、子文件根据权限显示，设置子文件夹的安全设置，取消继承，删除EveryOne，添加必要的用户即可&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sunrack/aggbug/1884331.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sunrack/archive/2010/11/22/1884331.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
