posts - 68, comments - 36, trackbacks - 0, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2008年9月16日

修改select  的selectedValue或者selectedIndex或者两者,在服务器端还是默认的选择项,想想可能与元素的selected有关,试了一下,果然如此。

aspx代码如此:

 

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtTest" runat="server"></asp:TextBox>
        <asp:DropDownList ID="ddlTest" runat="server">
        <asp:ListItem Text="1" Value="1" Selected="true"></asp:ListItem>
        <asp:ListItem Text="2" Value="1" ></asp:ListItem>
        <asp:ListItem Text="3" Value="1"></asp:ListItem>
        <asp:ListItem Text="4" Value="4"></asp:ListItem>
        <asp:ListItem Text="5" Value="5"></asp:ListItem>
        <asp:ListItem Text="6" Value="6"></asp:ListItem>       
        </asp:DropDownList>
        <script type="text/C#" runat="server">
            private void foo()
            {
                btnReturn.Click += new EventHandler(btnReturn_Click);               
            }
        </script>
        <script type="text/javascript">
        var txt = document.getElementById("<%=txtTest.ClientID %>");
        txt.value = "asdfsdf";
        var ddl =document.getElementById("<%=ddlTest.ClientID %>");
              
       ddlSelByValue( ddl,1,0);
      
        function ddlSelByIndex( ddl, index )
        {
         var selIndex = -1;
         // check
         if( ddl.length < 1 )
         {
            return;
         }
         if( index >= ddl.length )
         {
            return;
         }
        
         for(var i=0;i<ddl.length;i++)
         {
            if( ddl[i].selected == true )
            {
                selIndex  =i;
                break;
            }
         }
        
         if( selIndex != -1 )
         {
            ddl[selIndex].selected = false;
         }        
         ddl[index].selected = true;
        }
      
        function ddlSelByValue( ddl , value ,order)
        {
            // check
            if( ddl == undefined )
            {
                return;
            }
            if( value == undefined)
            {
                return;
            }
            if ( order == undefined )
            {
               order = 0;
            }
            if( order < 0 )
            {
                return;
            }
           
           var selIndex = -1;
           var index4Value =[];
        
         // get current selectedIndex and indexs for match the input value
         for(var i=0;i<ddl.length;i++)
         {
            if( ddl[i].selected == true )
            {
                selIndex  =i;
            }
            if( ddl[i].value == value )
            {
              index4Value.push(i);             
            }
         }
        
         // process
         if( index4Value == undefined || index4Value.length < 1 )
         {
            return;
         }        
         if( order >=  index4Value.length )
         {
            return;
         }        
         if( selIndex != -1 && selIndex == index4Value[order])
         { 
            return;
         }
        
         ddl[ selIndex ].selected = false;        
         ddl[ index4Value[order] ].selected = true;        
        }
        </script>
       
        <asp:Button ID="btnReturn" runat="server" Text="return" OnClick="btnReturn_Click" />
    </div>
    </form>
</body>
</html>
CS代码如下:

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

 }
 protected void btnReturn_Click(object sender, EventArgs e)
 {
  this.Request.SaveAs("c:\\a.txt", true);
 }
}

打开C:\a.txt,我们将会看到以下内容:

 

POST /WebSite1/Default.aspx HTTP/1.1
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 254
Content-Type: application/x-www-form-urlencoded
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-cn
Host: localhost:1230
Referer: http://localhost:1230/WebSite1/Default.aspx
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)

__VIEWSTATE=%2FwEPDwUKLTgxOTUxNjU1N2RkD74GTaa7YkYEXnEtKp8fUvs%2Fo10%3D&txtTest=asdfsdf&ddlTest=6&btnReturn=return&__EVENTVALIDATION=%2FwEWCQK6tuK0AwL9h%2FmcCQKK6%2BCJCAKK6%2BCJCAKK6%2BCJCAKJ6%2BCJCAKO6%2BCJCAKP6%2BCJCAL02tCyAsYjRYHRHKh5VciUq%2FsNDu9bmDaK

 

__ViewState以前是头部信息,__ViewState及其后面是控件的值,我们可以看到ddlTest=6,6为Value值,如果我们选择第二项或第三项,这个值永远是1,那么在服务器端,ddlTest.SelectedItem永远是第一个。

 

posted @ 2008-09-16 15:28 God Blue Shadow 阅读(15) | 评论 (0)编辑

2008年9月8日

对于ArcGIS的框架,我相信网上介绍得更多了,现在主要讲怎样安装ArcGIS组件来进行.net二次开发.

我们要装的组件有:ArcSDE,ArcIMS,ArcIMS.ADF.DotNet。

 

数据库我们采取主流的Oracle9i,我们选择Oracle9.2,但是不能选择Oracle9.0,因为它不能与SDE很好的协作,其它的版本未测试过。Oracle的安装过程略。

 

有了这个数据库基础了,我们可以来安装ArcSDE,选择ArcSDE for Oracle9i。按照默认的配置安装就可以了。当然,授权文件是必不可少,如果没有,上网找吧。

 

有了ArcSDE这个数据桥,我们来接着装ArcIMS这个大块头。

1.我们要装JRE,在ArcIMS的安装盘中可以找到I:\ArcExplorer_Java\Disk1\InstData\VM\Support\JRE\jre-1_5_0_06-windows-i586-p.exe,安装它。

对系统进行配置:添加系统变量 java_home , 值为C:\Program Files\Java\jre1.5.0_06

追加Path变量,值为:%java_home%\bin;

这样,ArcIMS就可以轻松的找到JRE了。

2.装ServletExec,可以在ArcIMS的安装盘中可以找到:I:\ServletExec\ServletExec_ISAPI_50013.exe,与Windows IIS打交道,肯定要选择ISAP啦。安装的过程中会让你设置用户名和密码的,安装完成后链接http://localhost/servletexec/admin ,如果可以用你刚才用户名和密码登陆就表示你ServletExec安装OK了。

 

3.安装ArcIMS,默认安装就可以了,在安装的过程中,提示你输入当前登录密码之类的;出现很多选择项的对话框,什么IIS,Apach,Tomcat之类的,选择 IIS + ServletExec。其它的地方按照提示默认安装就可以了。

4,安装完成后,重启IIS.

5.测试ArcIMS安装是否成功,选择开始->程序->ArcGIS->ArcIMS->Diagnostics,点击“1”按钮和“2”按钮,如果都出现Success字样,表明安装已经完成OK了。

 

6,为了将ArcSDE与ArcIMS协作好,必须定义系统变量:

 

对系统进行配置:添加系统变量 SDEHOME, 值为D:\arcgis\ArcIMS\Server (ArcIMS的安装目录下的Server)

追加Path变量,值为:%SDEHOME%\bin;

 

 

7,安装ADF.Dotnet

posted @ 2008-09-08 15:43 God Blue Shadow 阅读(24) | 评论 (0)编辑

2008年8月19日

     摘要: 将SqlHelper转化为OraHelper,发现代码冗余量太多了,故修改之。调用示例如下: string spName = "foo.fmonthsignstatdata";//"Usefreqmonthstat"; string spName2 = "foo.test2";//无参数 string connStr = "Data Source=ip3;user id=foo;password=... 阅读全文

posted @ 2008-08-19 18:49 God Blue Shadow 阅读(28) | 评论 (0)编辑

2008年3月13日

  SendKeys模拟键盘的操作,设置一定的键值,便可以自动控制。但是我们在使用的过程中,发现SendKeys不支持空格键,在很多的应用场景,都需要使用空格键,所以只好通过反射的方式将其调整。
代码如下:

            Type typeForKeywords = Type.GetType("System.Windows.Forms.SendKeys+KeywordVk[], System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");


            Type typeForKeywordItem = Type.GetType("System.Windows.Forms.SendKeys+KeywordVk, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
            object objNewKey = Activator.CreateInstance(typeForKeywordItem, "SPACE", 0x20);

            Type typeForSendKeys = typeof(SendKeys);

            FieldInfo fieldForkeywords = typeForSendKeys.GetField("keywords", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Static);
            object objKeys = fieldForkeywords.GetValue(null);


            Type typeForlistForKeyword = Type.GetType("System.Collections.Generic.List`1[[System.Windows.Forms.SendKeys+KeywordVk, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
            object objForTmpKeyWords = Activator.CreateInstance(typeForlistForKeyword);

            MethodInfo mi = typeForlistForKeyword.GetMethod("Add");

            foreach (object var in (Array)objKeys)
            {
                //list.Add(var);
                mi.Invoke(objForTmpKeyWords, new object[] { var });
            }

            //list.Add(key);
            mi.Invoke(objForTmpKeyWords, new object[] { objNewKey });

            mi = typeForlistForKeyword.GetMethod("ToArray");
            object objArray = mi.Invoke(objForTmpKeyWords, null);
            fieldForkeywords.SetValue(null, objArray);

posted @ 2008-03-13 15:26 God Blue Shadow 阅读(122) | 评论 (0)编辑

2008年2月18日

~    tilde
!     exclamation mark
@   at
#    hash (sharp, number sign)
$    dollar
%   percent
^    caret (uparrow, to the power of, hat, control)
&    ampersand (and)
*    star (asterisk, times)
(     left bracket (left parenthesis)
)     right bracket (right parenthesis)
_     underscore
-     dash (minus, hyphen)
|     pipe (bar, vertical line)
\     back slash
/     slash
:    colon
;    semi colon
‘    sigle quote
"     double quote
<     left angle bracket (less than)
>     right angle bracket (greater than)
{     left curly bracket (left brace)
}     right curly bracket (right brace)
[     left square bracket
]     right square bracket
.     dot (full stop, period)
,     comma
+    plus
=    equals
?    question mark

`    backquote或open quote 

posted @ 2008-02-18 10:36 God Blue Shadow 阅读(63) | 评论 (0)编辑

2007年10月24日

class QueueHashtable<TKey, TValue>
    {
        List<TKey> _keys = new List<TKey>();
        Hashtable ht = new Hashtable();

        public ICollection Keys
        {
            get
            {
                return _keys;
            }
        }
        public ICollection Values
        {
            get
            {
                return ht.Values;
            }
        }      

        public void Clear()
        {
            _keys.Clear();
            ht.Clear();
        }
        /// <summary>
        /// 根据键名得到键值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public virtual TValue this[TKey key]
        {
            get
            {
                return (TValue) ht[key];
            }
            set
            {
                ht[key] = value;
            }

        }
        public void Add(TKey key, TValue value)
        {
            ht.Add(key, value);
            _keys.Add(key);
        }

        public virtual bool ContainsKey(TKey key)
        {
            return ht.ContainsKey(key);
        }

        public virtual bool ContainsValue(TValue value)
        {
            return ht.ContainsValue(value);
        }      
        public virtual void Remove(TKey key)
        {
            ht.Remove(key);
        }
    }

//执行

 const int C_Count = 1000000;
            DateTime start = DateTime.Now;
            TimeSpan ts;

            //begin
            Console.WriteLine();

            System.Collections.Hashtable ht = new System.Collections.Hashtable();
            //add 10000

            start = DateTime.Now;
            for (int i = 0; i < C_Count; i++)
            {
                ht.Add(i, i);
            }
            ts = DateTime.Now - start;
            Console.WriteLine("  System Hashtable add  {0} elements cost '{1}' (ms)", C_Count, ts.TotalMilliseconds);


           

            QueueHashtable<int, int> qu = new QueueHashtable<int, int>();
            start = DateTime.Now;
            for (int i = 0; i < C_Count; i++)
            {
                qu.Add(i, i);
            }
            ts = DateTime.Now - start;
            Console.WriteLine(" HashtableQueue<int, int>   add  {0} elements cost '{1}' (ms)", C_Count, ts.TotalMilliseconds);

            start = DateTime.Now;
            foreach (int key in ht.Keys)
                ;
            ts = DateTime.Now - start;
            Console.WriteLine("  int key System Hashtable foreach  {0} elements cost '{1}' (ms)", C_Count, ts.TotalMilliseconds);

 

 

            start = DateTime.Now;
            foreach (int key in t.Keys)
                ;
            ts = DateTime.Now - start;
            Console.WriteLine("  HashtableQueue<int, int>  foreach  {0} elements cost '{1}' (ms)", C_Count, ts.TotalMilliseconds);

            Console.WriteLine();


            //comment
            //Hashtable t = new Hashtable();

            //start = DateTime.Now;
            //for (int i = 0; i < C_Count; i++)
            //{
            //    t.Add(i, i);
            //}
            //ts = DateTime.Now - start;
            //Console.WriteLine(" My Hashtable  add  {0} elements cost '{1}' (ms)", C_Count, ts.TotalMilliseconds);

            //start = DateTime.Now;
            //foreach (int key in t.Keys)
            //    ;
            //ts = DateTime.Now - start;
            //Console.WriteLine("  My Hashtable foreach  {0} elements cost '{1}' (ms)", C_Count, ts.TotalMilliseconds);

        }


posted @ 2007-10-24 16:49 God Blue Shadow 阅读(314) | 评论 (1)编辑

2007年7月5日

在开发PDA程序的过程中要使用dataGrid控件,必须要指定GridColumnStyle的MappingName通过UI 设计的方式,不能在后台代码中指定,也就是说必须在InitializeComponent里完成所有映射工作,否则会出现数据表无法绑定到dataGrid控件之上。

posted @ 2007-07-05 21:48 God Blue Shadow 阅读(129) | 评论 (1)编辑

2007年6月28日

        /// <summary>
        /// 将日期转化成指定格式,24制。YYYY: 年;MM:月;DD:日;HH:小时;mm:分钟;SS:秒;MS:毫秒。
        /// </summary>
        /// <param name="format"></param>
        /// <returns></returns>
        public static string ToString(DateTime dt, string format)
        {
            string year = dt.Year.ToString();
            string month = dt.Month.ToString("00");
            string monthSmall = dt.Month.ToString();
            string day = dt.Day.ToString("00");
            string daySmall = dt.Day.ToString();
            string hour = dt.Hour.ToString("00");
            string hourSmall = dt.Hour.ToString();
            string minute = dt.Minute.ToString("00");
            string minuteSmall = dt.Minute.ToString();
            string second = dt.Second.ToString("00");
            string secondSmall = dt.Second.ToString();
            string millisecond = dt.Millisecond.ToString();

            string value = format.Replace("YYYY", year);

            //,StringComparison.CurrentCulture
            if (value.IndexOf("MM") >= 0)
            {
                value = value.Replace("MM", month);
            }
            else
            {
                //防止替换M,使MS无效。
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < value.Length; i++)
                {
                    if (value[i] == 'M')
                    {
                        if (i + 1 < value.Length && value[i + 1] != 'S')
                        {
                            sb.Append(monthSmall);
                        }
                        else
                        {
                            sb.Append(value[i]);
                        }
                    }
                    else
                    {
                        sb.Append(value[i]);
                    }
                }
                value = sb.ToString();
            }

            if (value.IndexOf("DD") >= 0)
            {
                value = value.Replace("DD", day);
            }
            else if (value.IndexOf("D") >= 0)
            {
                value = value.Replace("D", daySmall);
            }

            if (value.IndexOf("HH") >= 0)
            {
                value = value.Replace("HH", hour);
            }
            else if (value.IndexOf("H") >= 0)
            {
                value = value.Replace("H", hourSmall);
            }

            if (value.IndexOf("mm") >= 0)
            {
                value = value.Replace("mm", minute);
            }
            else if (value.IndexOf("m") >= 0)
            {
                value = value.Replace("m", minuteSmall);
            }

            if (value.IndexOf("SS") >= 0)
            {
                value = value.Replace("SS", second);
            }
            else
            {
                //防止替换S,使MS无效。
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < value.Length; i++)
                {
                    if (value[i] == 'S')
                    {
                        if (i - 1 >= 0 && value[i - 1] != 'M')
                        {
                            sb.Append(secondSmall);
                        }
                        else
                        {
                            sb.Append(value[i]);
                        }
                    }
                    else
                    {
                        sb.Append( value[i]);
                    }
                }
                value = sb.ToString();
            }

            if (value.IndexOf("MS") >= 0)
            {
                value = value.Replace("MS", millisecond);
            }

            return value;
        }

posted @ 2007-06-28 18:02 God Blue Shadow 阅读(69) | 评论 (0)编辑

2007年6月26日

using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json;
using System.Data;
using System.Data.SQLite;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Product product = new Product();
            product.Name = "[]{}\\''\"\"Apple";
            product.Expiry = new DateTime(2008, 12, 28);
            product.Price = 3.99M;
            product.Sizes = new string[] { "Small", "Medium", "Large" };           
            string output = JavaScriptConvert.SerializeObject(product);
            Console.WriteLine("Product:");
            Console.WriteLine(output);
            //{//  "Name": "Apple",//  "Expiry": new Date(1230422400000),//  "Price": 3.99,//  "Sizes": [//    "Small",//    "Medium",//    "Large"//  ]//}
            Product deserializedProduct = (Product)JavaScriptConvert.DeserializeObject(output, typeof(Product));
            string[] values = new string[] { "Small", "Medium", "Large" };
            output = JavaScriptConvert.SerializeObject(values);
            Console.WriteLine("strings :");
            Console.WriteLine(output);
           string[] deserializedString = (string[])JavaScriptConvert.DeserializeObject(output, typeof(string[]));
        }
    }
    public class Product
    {
        private string _Name;

        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }
        private DateTime _Expiry;

        public DateTime Expiry
        {
            get { return _Expiry; }
            set { _Expiry = value; }
        }

        private decimal _Price;

        public decimal Price
        {
            get { return _Price; }
            set { _Price = value; }
        }
        private string[] _Sizes;

        public string[] Sizes
        {
            get { return _Sizes; }
            set { _Sizes = value; }
        }
 
 
    }
}

json.net 可以从http://www.newtonsoft.com/products/json/下载

posted @ 2007-06-26 14:48 God Blue Shadow 阅读(387) | 评论 (0)编辑

2007年6月13日

在做一个项目的过程中,需要对ORACLE数据库链接进行测试。

第一个想到的就是OracleClient命名空间,用.net自定的ORACLE访问组件来访问应该不会出现什么问题吧。
想象永远是美好的,不管是直接用SQL语句还是调用ORACLE中的存储过程都无济于事。所以这个方案只好放弃。

第二个想法是利用Oracle为.NET提供的访问组件(ODP.net),搞来搞去,ODP.net最低支持Oracle9i ,可是公司用的是Oracle8i,没办法,时间唉这样浪费了。

没办法,自己的方法行不通只好请教网上高手,但是找来找去,都不知其所云,眼看时间一点一点流逝,很快要下班,项目时间紧啊。

可能是急中生智,也可能是上天保佑,突然想到OracleClient是微软自己意淫的东西,Oracle未必认识,所以关键得调用Oracle的东西,那么就只剩下两条路了:OleDB,ODBC,考虑到OleDB是对ODBC的进一步封装,先试一下吧,不行就试一下ODBC啦。

经过几番周折,经于搞定了,OLEDB万岁!
但是不能直接采用select * from 用户名.表名@数据库链接名 这种直接SQL语句,而必须采用存储过程对这个SQL进行封装。确实是有点麻烦,不过问题解决了,才是最大的幸事,哈哈,经验值有增加了!!

posted @ 2007-06-13 18:21 God Blue Shadow 阅读(235) | 评论 (2)编辑